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

Reply via email to