Atlassian Bitbucket gives teams Git code management, but also one place to plan projects, collaborate on code, test and deploy. It is marketed in the SaaS form (Bitbucket Cloud) and in a self-managed version (Bitbucket Server), however they are not the same product. Bitbucket Server is simply a re-branding of Stash. The two products are completely different code bases, written in two different languages (Cloud in Python, Server in Java) and do not maintain feature parity. Because of separate codebases they each have a completely different API, making it much harder to integrate.
Bitbucket supports Mercurial or Git, but not SVN. GitLab does not support Mercurial or SVN.
GitLab is a single application for the complete DevOps lifecycle with built-in project management, source code managemetn, CI/CD, monitoring and more. Bitbucket only does source code managment. You would need to use Atlassian Jira to get project managment, and Bamboo for CI/CD and Atlassian does not provide a monitoring solution. Addditionally, GitLab Ultimate comes with robust built-in security capabilities such as SAST, DAST, Container Scanning, Dependency Scanning, and more. Bitbucket does not support these capabilities, and Atlassian does not have a product for them.
GitLab also offers a "prem" self-managed and "cloud" SaaS solution. GitLab runs the same exact code on it's SaaS platform that it offers to it's customers. This means customers can migrated from self-hosted to SaaS and back relatively easily and each solution maintains feature parity.
Atlassian has always forbidden to talk about the performance of their products in their ToS and in their previous EULA. We all know why, but we don’t talk about it.
Atlassian put the B-team on BitBucket Server and it isn't getting many updates because it is written in a different programming language. This stresses the value of having codebase parity accross products.