GitLab Inc. is a for profit company that balances the need to improve GitLab Community Edition (CE) with the need to add features to GitLab Enterprise Edition (EE) exclusively in order to generate income. We have an open core business model and generate almost all our revenue with subscriptions to use Enterprise Edition. We recognize that we need to balance the need to generate income and with the needs of the open source project.
We promise that:
If the wider community contributes a new feature they get to choose if it goes into CE or EE by sending the merge request to the repository they prefer (most go to CE). If the wider community contributes a feature already in EE to CE we use the process linked in Contributing an EE only feature to CE. When GitLab Inc. makes a new feature we ask ourselves, is this feature more relevant for larger organizations? If the answer is yes the feature is likely to be exclusive to EE.
There aren't any features that are only useful to larger organizations, so for every EE feature there will be smaller organizations that might need it. We're not saying that there aren't any small organizations that need the EE feature, just that we think that larger organizations are more likely to need it. The more of GitLab that you use the more likely it is that you benefit from a higher tier. Even a single person using GitLab might be best off using EE Ultimate.
The complete DevOps lifecycle is available in GitLab CE and there are companies using CE with more than 10,000 users.
If people ask us why a certain feature is EE only we might reply with a link to this section of the handbook. We do not mean to imply you don't need the feature. It implies we think the feature will be more relevant for larger organizations. Feel free to make the argument for the opposite, we're listening.
Sometimes people suggest having features in EE for a limited time. An example of a limited time release strategy is the Business Source License that keeps features proprietary for 3 years. At GitLab we want to give everyone access to most of the features (and all the essential ones) at the date they are announced. We want to give people the option to both run and contribute to an open source edition that is maintained and that includes the most recent security fixes. From time to time we do open source a feature that used to be EE only. We do this when we realize that we've made a mistake applying our criteria, for example when we learned that a branded homepage was an essential feature or when we brought GitLab Pages to the Community Edition.
Apart from making new features GitLab Inc. does a lot of work that benefits both CE and EE:
We never move existing features already in CE, into EE. This applies regardless of whether the feature was created by GitLab Inc. or community contributors. On occasion, the reverse does happen where we bring an EE feature to CE.
When someone contributes an existing EE feature to CE, we have a hard decision to make. We encourage contributors focus on new features not already existing in CE and EE, so that both CE and EE editions of GitLab benefit from the feature, and we can avoid any difficult decisions.
When someone contributes an existing EE feature to CE, we weigh a number of factors to decide in accepting it, including:
We'll weigh all factors and you can judge our stewardship of CE based on the outcome. As of July 22, 2016, we had only two cases: One had low code quality and the other one copied the EE code down to the last space. If you find these or other examples please link them here so people can get an idea of the outcome.
In case we're not sure, we'll consult with the core team to reach a conclusion.
When someone contributes a not yet existing feature on the EE issue tracker, and it has met the contribution acceptance criteria, we will accept it in whatever edition (CE or EE) they contribute to, provided that GitLab Inc. has not already started on working on the feature. (The contribution should not contain any already existing EE features in it.) We encourage contributors to @-mention the relevant product manager earlier in the development process (in the issue or merge request) to ensure GitLab team members are not already working on the feature in order to avoid conflicts.