One thing I've noticed over my time with ocaml and observing its development, is that there's some confusion and difficulty with regard to the introduction of new features. Some features are introduced with an obscure note in the manual stating that they could change in future ocaml versions. Others are introduced rapidly in one version and then cause backwards-compatibility problems for future language expansions. Still others take very long to integrate into the language. I'm wondering if it makes sense to make levels of integration into the language more official, and in the process, make it easier to introduce new features while giving users feedback about feature stability. The basic problem, as I see it, is that when features are written into the language, there's no good way for the authors to know how much these features will be used by programmers, or whether they'll cause complications in existing or future code. This gap between feature introduction and feature testing isn't currently accounted for in ocaml's development cycles. On the other hand, some features that would benefit from quick introduction to the users (as well as testing) get stuck in development hell because the language developers are overly conservative, trying to puzzle out whether the feature will be useful and consistent many years in the future, without the advantage of existing long-term user testing. Haskell has language extensions which, despite some negative effects, such as language bloat and bad backwards-compatibility, allow haskell to develop very quickly. A new feature is introduced under a language extension, which must be activated on a per-file basis. If people like it, the extension will survive to live in future versions. If not enough people use it or the feature is shown to be ineffective, the feature can be pruned out in future versions. The overall result is that haskell is very nimble, developing at a rapid clip and easily satiating user demands. While I'm not suggesting playing it fast and loose like haskell, perhaps it makes sense to have stages of integration into the language. I suggest 3 stages, borrowing the terminology from software release cycles (but perfectly willing to use other terminology or number of stages). An alpha feature is one that was just introduced, and is still likely to change in future versions. An alpha feature that has survived enough ocaml version iterations and seems useful and complete can move into beta level. I foresee features spending a long time in the beta state, which also guarantees the users a further level of stability over alpha features. At the same time, if ocaml users find little intrerest in maintaining certain beta features, they may be changed (slowly) or even demoted to alpha level (with sufficient notification). Graduating beta level means that the feature is fully incorporated into the language, and cannot change without serious consideration and *many* notifications to the users. Preferably, release-level language features will never be changed as is, but instead require being moved down to beta status first (given sufficient user notification). Some examples of possible current alpha features are modular implicits (as soon as they're ready to integrate into the code, but since they're alpha they can remain fairly fluid), immutable strings and the Bytes module, as well as extension types. Possible beta features could be GADTs(?) and first-class modules. Thoughts? -Yotam