{"id":3661,"date":"2014-02-03T10:39:19","date_gmt":"2014-02-03T00:39:19","guid":{"rendered":"https:\/\/www.flamingspork.com\/blog\/?p=3661"},"modified":"2014-01-31T20:20:39","modified_gmt":"2014-01-31T10:20:39","slug":"past-present-and-future-of-mysql-and-variants-part-1-ghosts-of-mysql-past","status":"publish","type":"post","link":"https:\/\/www.flamingspork.com\/blog\/2014\/02\/03\/past-present-and-future-of-mysql-and-variants-part-1-ghosts-of-mysql-past\/","title":{"rendered":"Past, Present and future of MySQL and variants Part 1: Ghosts of MySQL Past"},"content":{"rendered":"<p>You can watch the video of my linux.conf.au 2014 talk here: <a href=\"http:\/\/mirror.linux.org.au\/linux.conf.au\/2014\/Wednesday\/28-Past_Present_and_future_of_MySQL_and_variants_-_Stewart_Smith.mp4\">http:\/\/mirror.linux.org.au\/linux.conf.au\/2014\/Wednesday\/28-Past_Present_and_future_of_MySQL_and_variants_-_Stewart_Smith.mp4<\/a><\/p>\n<p>But let&#8217;s talk about things in blog form rather than video form :)<\/p>\n<p>Back in 1979, there was UNIREG. A text UI to records (rows) in a database (err, table). The reason I mention UNIREG is that it had FoRMs which as you may have guessed by my capitalization there is where the FRM file comes from.<\/p>\n<p>In 1986, UNIREG came to UNIX. That&#8217;s right kids, the 80&#215;24 VT100 interface to ISAM (Index Sequential Access Method &#8211; basically rows are written in insert order and indexes point to them) came to UNIX. There was no generic query language, just FoRMs and reports. In fact, to this day, that 80&#215;24 text interface is stored in the FRM file by MySQL and never ever used (<a href=\"https:\/\/www.flamingspork.com\/blog\/2009\/02\/15\/the-frm-file-format\/\">I&#8217;ve written about this before<\/a>).<\/p>\n<p>Then there was this mSQL thing around the 1990s, which was a small SQL server (with source) but not FOSS. Originally, Monty W plugged in his ISAM engine but it wasn&#8217;t quite the right fit&#8230; so in 1995, we had MySQL 1.0 and MySQL AB was founded.<\/p>\n<p>Fast forward a bit and in 1996 we had MySQL 3.19 and development continued. It managed to gain features, performance, ports to different operating systems and CPU architectures and, of course, stability.<\/p>\n<p>It wasn&#8217;t until the year 2000 that MySQL adopted the GPL. This turned out to be a huge step in the right direction for increased adoption. At the time, this was a huge risk for the company, essentially risking all the revenue of the company on making the software more free.<\/p>\n<p>This was the birth of the dual licensing business model. You see, the client library (libmysql) was also GPL, which meant it was easy to use if your application was also GPL, but if you were going to distribute your application and it wasn&#8217;t under a GPL compatible license (there was also a FOSS exception so that things like PHP could use it) then you needed a license.<\/p>\n<p>Revenue from licensing was to be significant throughout the entire history of MySQL AB.<\/p>\n<p>(We&#8217;ll continue this in part 2 tomorrow)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You can watch the video of my linux.conf.au 2014 talk here: http:\/\/mirror.linux.org.au\/linux.conf.au\/2014\/Wednesday\/28-Past_Present_and_future_of_MySQL_and_variants_-_Stewart_Smith.mp4 But let&#8217;s talk about things in blog form rather than video form :) Back in 1979, there was UNIREG. A text UI to records (rows) in a database &hellip; <a href=\"https:\/\/www.flamingspork.com\/blog\/2014\/02\/03\/past-present-and-future-of-mysql-and-variants-part-1-ghosts-of-mysql-past\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[14],"tags":[87,374,628,201],"class_list":["post-3661","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-frm","tag-history","tag-mysql","tag-unireg"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5a6n8-X3","jetpack-related-posts":[{"id":3276,"url":"https:\/\/www.flamingspork.com\/blog\/2013\/04\/10\/more-on-the-frm-file-format-and-the-minimum-maximum-number-of-columns-in-mysql\/","url_meta":{"origin":3661,"position":0},"title":"More on the FRM file format (and the minimum maximum number of columns in MySQL)","author":"Stewart Smith","date":"2013-04-10","format":false,"excerpt":"Over at the work blog, I wrote about what the true maximum number of columns in MySQL is as well as the minimum maximum. Basically, the FRM file is ass and places bizarre arbitrary limits on things due to what can only be seen as \"limitations\" in 1980s computing and\u2026","rel":"","context":"In &quot;General&quot;","block_context":{"text":"General","link":"https:\/\/www.flamingspork.com\/blog\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3231,"url":"https:\/\/www.flamingspork.com\/blog\/2013\/03\/03\/unireg-h-is-gone\/","url_meta":{"origin":3661,"position":1},"title":"unireg.h is finally gone","author":"Stewart Smith","date":"2013-03-03","format":false,"excerpt":"I got rid of unireg.cc way back in 2009 as I rewrote all the FRM related code inside Drizzle to instead use a nice protobuf based structure. If you're wondering what was there, I just quote this part of pack_screens() from unireg.cc in MySQL 5.6: start_row=4; end_row=22; cols=80; fields_on_screen=end_row+1-start_row; We\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3651,"url":"https:\/\/www.flamingspork.com\/blog\/2014\/01\/13\/my-lca2014-talk-video-past-present-and-future-of-mysql-and-variants\/","url_meta":{"origin":3661,"position":2},"title":"My lca2014 talk video: Past, Present and Future of MySQL and variants","author":"Stewart Smith","date":"2014-01-13","format":false,"excerpt":"On last Wednesday morning I gave my talk at linux.conf.au 2014. You can now view and download the recording of it here: http:\/\/mirror.linux.org.au\/linux.conf.au\/2014\/Wednesday\/28-Past_Present_and_future_of_MySQL_and_variants_-_Stewart_Smith.mp4 (hopefully more free formats will come soon, the all volunteer AV team has been absolutely amazing getting things up this quickly).","rel":"","context":"In &quot;linux.conf.au&quot;","block_context":{"text":"linux.conf.au","link":"https:\/\/www.flamingspork.com\/blog\/category\/linuxconfau\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2447,"url":"https:\/\/www.flamingspork.com\/blog\/2012\/01\/23\/mysql-and-postgresql-cloud-offerings-linux-conf-au-2012-miniconf-talk-by-myself-and-selena\/","url_meta":{"origin":3661,"position":3},"title":"MySQL and PostgreSQL Cloud Offerings &#8211; linux.conf.au 2012 miniconf talk by myself and Selena","author":"Stewart Smith","date":"2012-01-23","format":false,"excerpt":"Selena and I gave a talk on the various issues of running databases \"in the cloud\" at the recent linux.conf.au in Ballarat. Video is up, embedded below:","rel":"","context":"In &quot;mysql&quot;","block_context":{"text":"mysql","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1251,"url":"https:\/\/www.flamingspork.com\/blog\/2008\/11\/06\/goodbye-frm-or-at-least-the-steps-to-it\/","url_meta":{"origin":3661,"position":4},"title":"Goodbye FRM (or at least the steps to it)","author":"Stewart Smith","date":"2008-11-06","format":false,"excerpt":"Since before MySQL was MySQL, there has been the .FRM file. Of course, what it really wanted to be was \".form\" -\u00c2\u00a0 a file that stored how to display a form on your (green) CRT. Jan blogged earlier in the year on this still being there, even in MySQL 5.1\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2041,"url":"https:\/\/www.flamingspork.com\/blog\/2010\/06\/29\/enum-now-works-properly-in-drizzle\/","url_meta":{"origin":3661,"position":5},"title":"ENUM now works properly (in Drizzle)","author":"Stewart Smith","date":"2010-06-29","format":false,"excerpt":"Over at the Drizzle blog, the recent 2010-06-07 tarball was announced. This tarball release has my fixes for the ENUM type, so that it now works as it should. I was quite amazed that such a small block of code could have so many bugs! One of the most interesting\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/3661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/comments?post=3661"}],"version-history":[{"count":1,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/3661\/revisions"}],"predecessor-version":[{"id":3663,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/3661\/revisions\/3663"}],"wp:attachment":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/media?parent=3661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/categories?post=3661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/tags?post=3661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}