Hi all,
With the recent release of Sakai 21.0 (Thanks to all involved). We need to do some thinking about our direction forward w.r.t. how we approach our MySQL support in the Sakai community.
We have been supporting MySQL and Oracle since 2002 (19 years). In the old days, MySQL was the 100% open alternative for open source applications. But then in 2010, Oracle gained control of MySQL by buying Sun Microsystems[1]. At that point in time MariaDB was forked from the last non-Oracle version of MySQL. Some in the Sakai Community experimented with MariaDB from time to time - in the early 2010's if things went wonky we ran back to MySQL.
Oracle has released MySQL 5.6 and 5.7 and MariaDB kept pace[2] - even to the point of binary interoperability. We along with the rest of the open source world found this equivalence comforting and felt it was OK to just keep using MySQL and let the "other folks" use MariaDB.
But support for MySQL 5.6 just expired (February 2021) and support for MySQL 5.7 expires in October 2023. So we have just over two years...
The version of MySQL after 5.7 is MySQL 8.0. MySQL 8 is the first version that is heavily influenced by Oracle and it feels to me like MySQL 8 and MariaDB may begin to diverge. Hibernate (as of 5.3) supports the org.hibernate.dialect.MariaDBDialect separately from its MySQL dialects. Hibernate also supports the org.hibernate.dialect.MySQL8Dialect.
The reasonably high likelyhood is that Sakai will be able to simultaneously support the various versions of MySQL and MariaDB without too much effort going forward. Half of the SQL in Sakai is hand-constructed and half of the SQL is constructed by Hibernate. Our hand-constructed SQL does not make use of intricate features of MySQL so it is likely to keep working in MySQL 8 and MariaDB 10. And you can pick your Hibernate dialect and support all the databases.
So the question is less about *not* supporting MySQL 8 that it is about deciding what our "preferred" / "first choice" database will be. For this preferred MySQL compatible database we can encourage developers to test using the preferred database and then run our nightly servers using that preferred database.
For example for Sakai 21 on our nightly page[3], we have eight MySQL 5.7 servers and one Oracle server.
For Sakai 22, we could keep things the way they are or switch to any the following:
* Run eight MariaDB 10 servers, 1 MySQL 5.7 server, and 1 Oracle Server
* Run eight MySQL 5.7 servers, 1 MariaDB server, 1 MySQL 8 server, and 1 Oracle Server
* Run eight MariaDB 10 servers, 1 MySQL 5.7 server, 1 MySQL 8 server, and 1 Oracle Server
* Run eight MySQL 8 servers, 1 MariaDB server, 1 MySQL 5.7 server, and 1 Oracle Server
You get the picture. By leaning towards either MySQL 8 or MariaDB 10 - we are signaling our "preference" / "first choice".
We of course would fix problems that emerged in any of those databases. We would not want to break Sakai and MySQL 8 just to do something cool in MariaDB 10 or vice versa. We need to write conservative SQL and accept fixes if some hand-written SQL breaks 5.7, 8.0 or MariaDB 10.
The question is where the majority of us are going to go so we can stick together and protect each other's flanks by using a common approach wherever practical.
We can delay this decision until we release Sakai 22 - but the decision is easier and safer now. We get a year to experiment with the different databases and then based on what we learn this year - we can make a more informed decision next year. Also by next year we might get some signals from the market and other open source projects as to where they will be going w.r.t. the "MySQL 8 - to be or not to be" question.
My Opinion
At a minimum, I would like a trunk master running on MySQL 5.7, MySQL 8.0, MariaDB 10, and Oracle. I will run my Smoker process against all four every night, to probe for really bad regressions. If we could somehow make them have identical sites and data - I could compare them click for click with smoker.
Once we chat a bit about this on the lists, I will do a survey to poll the community.
Comments welcome.
/Chuck
References
[1]
https://en.wikipedia.org/wiki/MySQL
[2]
https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/
[3]
http://nightly2.sakaiproject.org/