MariaDB 10.0 and MySQL 5.6
In May of last year I blogged about MariaDB 10.0 for the first time. We received some feedback, digested it, and I further explained MariaDB 10.0. Now, with the first Alpha of MariaDB 10.0 out and a new year just beginning, now is a good time to explain a little bit more, especially about MariaDB 10.0 and MySQL 5.6 as I and others in the MariaDB project get asked a lot about the differences between them.
First, here are some details as to why we didn’t just take MySQL 5.6 as a base and create something that would have been called MariaDB 5.6. These details haven’t been widely shared before:
- The file structure of the codebase in MySQL 5.6 has changed. Single code files have been split into several and code has been moved around from one file to another. To merge MariaDB with this new file structure would be a very time consuming job. Why the file structure changed on the MySQL side is something that I don’t know the answer to.
- MariaDB 5.5 contains a large amount of code differences from MySQL 5.5 and includes many features that are only now being introduced in MySQL 5.6. In these cases the MySQL and MariaDB versions of the same functionality are compared and both design and QA reviews are done. Obviously, the one that scores better will be in MariaDB. In most cases the decision has been to use the MariaDB version of the feature.
- All new code (at least bug fixes) in MySQL does not necessarily have a corresponding test case anymore. When you merge such functionality into other code which differs from the code where the functionality originally resided, test cases are extremely important for evaluating that the functionality works as expected.
Very much in line with the second and third argument above, Stewart Smith from Percona wrote yesterday about the latest security fix in MySQL introducing a regression and how the QA work done in the MariaDB project and the importance of test cases saved him from placing the regression in Percona Server.
MariaDB is not only about being an alternative to MySQL. MariaDB is largely about innovating and improving MySQL technology. MySQL 5.6 was not a suitable base for innovation, so the following happened:
- We needed to introduce a new version since we are already in the process of introducing new features like multi-source replication, Cassandra integration, engine independent statistics and many more. Whenever you introduce new features you typically advance to a new major version.
- It would have been wrong to call next version “MariaDB 5.6”, because it’s not based on MySQL 5.6. Instead we decided to jump to 10.0.
- We know MariaDB needs to implement many of the features introduced in MySQL 5.6 to be a viable alternative to MySQL 5.6 and we have taken a stepped approach in merging or recreating features from MySQL 5.6.
The first major version, MariaDB 10.0 will, for example, include the merged InnoDB, merged Performance Schema, and a new implementation of Global Transaction ID. MariaDB 10.0 is targeted to be GA in the summer.
Our goal with the stepped approach is to eventually have all features of MySQL 5.6 either merged or re-implemented. All re-implemented features will be made compatible with their MySQL versions. In the end, MariaDB 10 should be fully feature compatible with MySQL 5.6 and, of course, on top of that include many extra MariaDB-only features.
The decision to re-implement functionality is very simple. We re-implement if a given implementation in MySQL 5.6 lacks something from our or the users’ point of view. A decision to re-implement is not made in an “I would like to do this”-manner, nor is it influenced by a “not-invented-here” syndrome. Each case is truly evaluated and extensively discussed. You can participate in these discussions and get your voice heard by joining the mailing list maria-developers@lists.launchpad.net at https://launchpad.net/~maria-developers.
Could another route have been chosen? Yes. We could have pulled in the latest version of MySQL 5.6 as a base for a version called MariaDB 5.6 and started patching. It should be kept in mind that MariaDB isn’t a bordered set of patches. Although MariaDB has MySQL as a basis there is a huge amount of engineering on top of it. The MariaDB engineers and QA are working full time on making MySQL technology better inside MariaDB.
There was also another possibility — to become a true fork, stop merging from MySQL, and break compatibility. But we didn’t want to take that path — we and MariaDB users in general do value much of the functionality introduced in MySQL and want it included in MariaDB.
MariaDB 5.5 has been a key part of MariaDB’s increasing popularity and we’re still riding upwards on that wave. More downloads every week, more distributions adopting MariaDB, and more big use cases.
Inside the MariaDB project we’re carefully handling a balancing act of being as easy an alternative to MySQL as possible while also introducing much-needed innovation, and keeping it all realistic as well. Without innovation MariaDB isn’t a product of its own.
Join the joint MariaDB & SkySQL roadshow to hear the latest about MariaDB and talk to us! Find the roadshow schedule and registration here.
What about innodb full text search and ipv6 support like INET6_ATON(), INET6_NTOA()?
Innodb full text search won’t be in 10.0, it might be in 10.1. That is, innodb in 10.0 supports the full text search, but the server doesn’t use it.
INET6_ATON() and INET6_NTOA() can be in 10.0 still, yes.
https://mariadb.atlassian.net/browse/MDEV-4051
Is there a roadmap for when you expect to release a fully compatible version with MySQL 5.6? It sounds like it won’t happen near term.
One of the main selling points for MariaDB is that it is a drop in replacement for MySQL, but it sounds this will basically no longer be true correct? Once someone is using MySQL 5.6, they mostly lose the ability to do the direct replacement.
tell me about “InnoDB Record, Gap, and Next-Key Locks”
This behaviour will be fixed some day?
So whats the best option to go to 10.0 from 5.6 MySQL?
a) innobackupex and import it to a new parallel database – and then switch
b) downgrade to 5.5 and change to mariadb 5.5. – then upgrade to 5.6
I think the drop-in replacement is one of the major reasons why MariaDB became popular.
Thanks!