Currently, CouchDB requires at least OTP 17 or later to build and run [1][2]. However, recent work undertaken to eliminate compiler warnings [3][4] has highlighted the additional effort needed to continue to support older Erlang versions. Some of the issues that have come up are: 1. erlang:now/0 deprecated in OTP 18 [5] 2. crypto:rand_uniform/2 deprecated in OTP 20 [6], but no rand module pre-OTP 18 which both require using rebar platform defines [7] and ifdefs [8] to work around compiler warnings.
Joan raised the idea that maybe it's time to move to a more recent minimum version to simplify the code, and also because there a many compelling new features in later versions that we currently cannot use: 1. maps introduced in OTP 17, but only became performant for large number of entries in OTP 18 [9] 2. off heap messages introduced in OTP 19 [10] Since CouchDB now ships with it's own OTP 19.6.3 Erlang binaries [9], it's not clear whether we need to continue supporting OTP 17 and 18. As a bonus, removing those versions will also speed up travis builds. Any thoughts either for or against this proposal? Best regards, Jay [1] https://github.com/apache/couchdb/blob/master/rebar.config.script#L94 [2] https://github.com/apache/couchdb/blob/master/.travis.yml#L10 [3] https://github.com/apache/couchdb-ets-lru/pull/7 [4] https://github.com/apache/couchdb/pull/1798 [5] http://erlang.org/doc/apps/erts/time_correction.html [6] http://erlang.org/pipermail/erlang-questions/2017-May/092435.html [7] https://github.com/apache/couchdb/blob/master/src/couch/rebar.config.script#L148-L154 [8] https://github.com/apache/couchdb/blob/master/src/couch/src/couch_rand.erl#L22-L57 [9] http://erlang.org/download/otp_src_18.0.readme [10] https://www.erlang-solutions.com/blog/erlang-19-0-garbage-collector.html [9] https://github.com/apache/couchdb-ci/blob/master/README.md