Over the past 3 years, we’ve been publishing reports that reveal which versions of a certain open source language developers use in real-world commercial applications on the Semaphore blog. The data is based on thousands of private projects which are tested and deployed on Semaphore. We’re now happy to present to Medium readers our most comprehensive report to date, revealing insights about seven major open source languages.
Elixir is a fairly young language and naturally almost all projects are based on a very recent version of it. 40% of projects are using a version of Elixir which was released this year (1.4 and up), while 96% are using a version not older than 1.2, which was released on Jan 1, 2016.
Fun fact: many components of Semaphore are built as Elixir microservices. You can read our thoughts on technical challenges that lead to building microservices and a small example of designing a microservice with Elixir and RabbitMQ.
Go developers like to split their pie evenly.
Go’s release policy states that each major Go release is supported until there are two newer major releases. So, 60% of commercial Go projects are currently using an officially supported version.
Most projects are based on Java 8.
Java 9 was released in September ’17, however it seems that it won’t see any significant adoption among existing projects. Oracle has announced that Java 8 will be a long-term support release, supported through 2022, while Java 9 will not be designated for long-term support. This, along with the new modularity feature which takes some getting used to, is probably what has influenced most teams to wait for the next long-term release. Java 18.9 LTS is scheduled to arrive in September 2018.
A lot has happened to the Node.js runtime in the past few years. Meteoric rise in early adoption, then a slowdown, fork, and finally consolidation with a new release schedule. As a result, reality is that almost a third of all projects is based on an outdated version of Node, while less than 10% use a version released in 2017 (v8 or v9).
Node 9 was released this fall, but we’re yet to see significant adoption. It’s worth noting that, as of March, AWS Lambda supports Node.js version 6.10.
Node.js version adoption 2015–2017
You can read the full Node.js version report on the Semaphore blog.
PHP has been one of the top 10 most used languages for years, and it’s present on the server-side for the majority of websites accessible today.
The majority of projects are using version 5.6, whose active support period ended on 19th January 2017. This version will continue to get security updates until the end of 2018. Versions 5,3, 5.4, and 5.5, which are no longer supported, are used in 34% of projects. This may be due to the fact that the process of updating from 5.x to 7.x is complex. For example, many fatal errors have been converted to exceptions, there are many changes to variable and integer handling, etc.
Version 7.0 is used in 19% of all PHP projects. This version was released in December 2015, and its active support period ends in 1 month. Version 7.1 was released in December last year. So far, only 9% of projects are using it.
You can take a look at the official supported PHP versions page for more information on when different versions were released and what are their active support periods.
Semaphore’s last year’s Python report received a lot of attention on Hacker News and various forums because it showed that, despite Python 3 being released in 2008, over 70% of commercial projects were still based on 2.7. This year, results are a bit better for Python 3, but not much.
As of April this year, AWS Lambda supports both Python 3.6 and 2.7.
You can read the full Python version report on the Semaphore blog.
Open source is moving fast, and Ruby community is known for keeping up. Over 85% of projects use Ruby version 2.0 and higher.
Overall it seems that as soon as teams move from 1.9.3 to 2.x, it gets easier to move to newer versions.
An important thing to note is that versions 2.0 and 2.1 have reached their end of life, and EOL date for Ruby 2.2 is scheduled for the 31st of March 2018. We highly recommend upgrading to newer versions, since the older versions don’t receive any security updates.
Another thing to note is that Rails 5 supports only Ruby 2.2.2 and higher.
You can read the full Ruby version report on the Semaphore blog.
You might also want to check out Rails Testing Grader — a tool which compares your Rails test suite to the industry to find out where you stand.
How do you keep up with new releases and keep your application up to date? Let us know in the comments.