|Michael Widenius is best known as "Monty" of MySQL fame. We found him busy working on new
features for MySQL and asked a few questions...
- What editor do you use?
XEmacs; I started with vi over 300 baud lines to the university but
quickly changed to use Emacs when I got an Unix computer of my own. I
switched to XEmacs when it come out as I found it much easier to get
friends to use this, thanks to the menu system, than with old Emacs.
- Do you use revision control systems of some kind, and have you any
serious thoughts on the matter?
I use CVS with MySQL but have never got a real good feeling with
it. It also doesn't scale that well with many developers that works on
the same piece of code, where every release have to be stable.
We plan to switch to Bitkeeper or Aegis really soon.
What is your favorite language, C, C++, some half arsed scripting language
I like C a lot as you can get real close to the hardware when you feel
a need for it; I mainly use C++ as a better C and only use classes for
the things where I feel classes gives you a big advantage. For real
hard class handling I prefer CLOS in Lisp :)
X vs console?
X; I recently got a 24" screen and I can't really imagine using
console on this :)
Window manager / GNOME / KDE environment?
On SUN I used CDE for many years and on Linux I have been using KDE a
long time. I did however 2 days ago switch to Enlightenment and GNOME
just to try these out.
What is your favorite hardware and OS platform?
The last 4 years I have been working mostly with threads and on this
Sun Sparc has been really excellent (I used Sun boxes for 7 years
before that). 2 years ago I switched all development of MySQL to
Linux Intel, but I have never really liked the Intel instruction set.
I got 4 weeks ago a real nice 2x500 Alpha Linux box with 2G memory
from Compaq just to ensure that MySQL works on this and I REALLY like
this box :) I may soon switch over my development environment to this
- Did you ever attempt to write yet another
- Window manager?
After struggling with Motif for 2 years, I was tempted to do this, but
never got the time to start doing it.
SQL is in a broad sense a programming language (even if it doesn't
fulfill the requirements for a true programming language). I have
over the years implement 4-5 small specific languages within different
applications to be able to solve some things nicely, but nothing that
could be used as a general purpose languages.
I wrote once a multitasking operating system for a 4 mz Z80 with 32K
memory to handle real time sampling of data for a Swedish energy
company. This was quite fun as we didn't have any simulators for it,
so you just have to write the code, eprom it, put it into the machine
and hope that it worked. You had to code things really carefully back
then as you didn't want to spend the whole evening burning eproms... :)
Has anyone offered to pay you/hire you based upon your Open Source
Yes; I do get request for this quite often in the beginning, but less
often as MySQL got more and more popular; I assume most people thought
(quite correctly) that I was already quite locked into MySQL and
wasn't the quick to change to another one. Nowadays I mainly got
letters from people that ask me if I know someone that would be
willing to get a high profile, high paid job and if I could
submit the request to them :)
What application or component is linux most lacking?
More games to attract more users from the Windows world (I think Loki
is doing a wonderful job on this!)
The one thing I am personally is missing the most is to be able to use
DVD / CD-writes as easily as you can do from Windows. (Just be able to
using a CD-RW / DVD-RAM as a normal hard disk would be GREAT!); I
really would like to be able to do quick incremental backups on DVD
every night and be able to quickly access any old copy of any file.
Is this your first interview by anyone?
No; I think this is at least the 4th interview.
What's the story on more advanced features, like
transactions/rollbacks, and outer joins?
Your mail just interrupted me from working on the new transaction safe
tables and replication issues, both that should be ready quite
soon. (weeks, not months...). Our transaction handling will enable a
user to specify which tables he want to have transaction safe and
which doesn't have to be. In other words, one can get the best from
both words, extra safety (or ability to do rollback) or speed,
depending on the application. MySQL already supports the full LEFT
OUTER join syntax; Full outer joins will be implemented at the same
time as UNION's and sub select, but it will take a few months until we
can start working on these. (We need to do replication first).
Does it annoy you that people can sell databases like Oracle that drive
people mad, when you give yours away, or is the fact that people don't
have breakdowns over shortcomings in MySQL (speaking from experience
No, why should it? Oracle is a good database for a very special kind
of market (true online transactions with real many concurrent
users). We do on the other hand think that for the majority of
applications, MySQL will be a better choice and in the long run we
hope to be able to prove it :)
Why Monty? Did you ever play "Monty on the Run", on the 8-bit
I have always been called Monty; My Mother thought there was too many
Mickey's (a common short for of Michael over here) and decided to
start calling me something that would be a bit different. It has
sticked since then. (I didn't know about the "Monty on the Run' game;
If I would have heard about it, I would have played it..)
Any idea when subselects will arrive? (I'm sure you're sick of this
question :-) )
The problem here is that it it would only take 2 weeks to implement a
first version of sub select that would probably satisfy most users.
Somehow during the last 8 months, something else that we thought was
even more important has always come in between. Last year was also
quite exceptional as David (my partner in this MySQL thing :) and I
was on a LOT of conferences and Expos and these things do take times.
About 4 months ago I thought that now is the time to implement sub
selects, but then we got a very nice possibility to quickly get high
quality transactions into MySQL. Recently Andover.net also sponsored
replications in MySQL and we had to schedule this before sub selects.
We think that replication is even more important for a lot of MySQL
users, that have high load on their web sites, than sub selects.
On option would of course be to just spend a few hours to add an
automatic conversions of the most common sub selects to normal joins
to get something working until can do this completely right.
This is basicly the hardest this with having a basicly Open Source
project with only a limited number of employers: We have really tried
to quickly get all bugs out of MySQL to ensure that it should be quite
stable. (This of course means many MySQL release that has to be tested
before releases). We, the MySQL developers, have also always
helped many MySQL users with their problems on our mailing list. We
belive it's really important for us to understand the possible
problems with MySQL to be able to fix or avoid these, or at least
be able to document these to help new users avoid these problems.
Unfortunately, with a product with many users, the above takes a LOT of
The good news is however that we are now getting new MySQL developers
of the rate of at least 1 / months (we have grown from 4 - 14 within a few
months), so even if I don't personally have time to do anything
significant on the sub select issue myself, before transactions and
replication is ready, we can now move forward on many issues at the
same time. The bad news is of course that it always takes a time
until new developers can get accustomed with a lot of new code. Even
if my typical days is 15 hours of work, I haven't got that much time
over to do any real long time coding sessions for a while :( I do
however see that things are now definitely going in the right
direction and we should now be able to accelerate development on many
different issues at the same time!
Why were subselects such a big issue? I'm not by any means an export C
programmer, and I know very little about database internals, but I'm
curious as to what made it so difficult. I've implemented my own little
mini sub-select parser in Perl, and it was not exactly difficult. I can
see that for general use, there may be major issues of efficiency etc. But
I'd have preferred an inefficient implementation to none at all.
MySQL has been criticized for lacking some of the "useful" features like
transactions and rollback present in bigger databases. Work is on-going
on these features in the new 3.23 branch but do you feel that this will
significantly take away from the speed advantage MySQL now enjoys in the
web arena of database work?
For not transactional tables, it will not slow done MySQL down at
all. For transaction safe tables I can't really say anything yet, but
I hope to be able to benchmarks some things within a few days...
Related, how long will it be before 3.23 becomes a stable release?
(yeah, I'm dying to use it in production!)
All major changes between MySQL 3.22 and 3.23 was done about 6 months
ago and these are quite well tested by now. We have for a couple of weeks
been at a stage that all new changes that we still plan to add to the
3.23 branch will not affect any old code. If there isn't any big bugs
reported for 3.23.13 during this week, we will release 3.23.14-beta
next week. (I am quite confident that we can add safely add the
transactions safe class into MySQL 3.23 without braking any old
applications that doesn't use these types of tables).
Is there a significant difference between the queries a web server
database has to handle compared to traditional POS or desktop
applications? (ie. sessions in a web server vs "always-on" desktop apps)
Yes; In a web server database you may have to do a lot of connections
to the database server (everyone can't use persistent connections) and
not many databases can handle this nicely. Another issue is that
you almost newer need to issue a rollback in your application in a web
server database and in this case you normally don't need transactions.
In a web server database the queries you issue is also really
different than in a stand alone application and you also can't wait
that long for an answer as you may have to do 20-40 queries for every
single web pages that you plan to show. With a lot of users, you
really need a fast database that is designed for this (like MySQL :)
Have you deliberately gone out of your way to make sure MySQL works best
in a web environment?
Yes. In web databases speed is often the most important single
features as you can't afford to loose customers because they can't
access your pages (or get tired off waiting for them). A lot of
companies with real high loaded web sites has also asked us to
optimize MySQL for their type of applications. The optimizations (and
SQL extensions) we have added to be able to do this, has benefited all
MySQL users and over time this has helped MySQL to very suitable for
the web environment. For example the ability to without additional
cost be able to do any kind of select and insert on the same database
without any significant performance loss is quite unique in MySQL.
Embedded databases? Are you interested? Considering the license on
MySQL (pay if you depend on it to sell a product) has the embedded market
attracted any attention? Does MySQL scale down well?
The biggest license revenue we get for MySQL if from systems where
MySQL is embedded. One reason is of course that for the big part of
applications MySQL scales extremely well.
We plan to in the short time do an GPL MySQL library version that you
can link into any application. The API will be a drop in replacement
for the current one so you will be able at link time (or by just
swapping shared lib or .DLL) be able to switch between a standalone or a
client/server application). We think this will MySQL even more
interesting for the embedded market! (The major benefit for a
standalone application is of course that it will be much easier to
Where do you see MySQL going in the far future? Scaling, zend as an
embedded scripting language?
We plan to in the long run make MySQL fully ANSI SQL xx compliant, but
we are not going to sacrifice speed when doing this; You will always
be able with run time or compile time options be able to say what is
important for your applications and thus be able to compile a lean
MySQL version (just like you today do with the Linux kernel).
We are always interested in speed and scaling is thus very important
for us; In the short time we are going to provide scaling through
replication but there is other possibilities open for the future.
We are also going to provide a scripting languages within MySQL (we
have to, to be able to be ANSI SQL compliant) and we have looked at
Zend for this (Zeev and Andi has done a great job with this!)
I remember reading that MySQL isn't the main product of TCX, that it was
created to "fill a need" in the company. Does it have a larger role in
the company now?
TCX has always been a convenient front for MySQL for David and me; Now
that MySQL has grown we are going to take MySQL out of TCX and make a
MySQL company (MySQL AB) to handle MySQL issues. This way we hope to
avoid a lot of name confusion in the future.
How do you keep answering the same questions over and over, or answering
stuff that's blatantly in the manual and still keep your composure on
the MySQL mailing list? ;)
It the beginning I didn't mind but when the same question (first it
was Access denied) appeared we decided that instead of answering the
same question over and over again, we should instead try to
document everything as good as possible and start just directing
people to the manual. As soon as we notice that a question has been
raised multiple times we have added this to the manual. I think we
have done a decent job in this as some of the questions we had from
the beginning isn't repeated as much as before, even if we have got a
lot more users since then.
Recently, after we got more MySQL developers, I have had to distance
myself from the MySQL mailing list to get some development work done
(I do however still get 60-90 personal letters that I have to answer
every day). All really hard questions (or bugs) are forwarded to me
and I try to answer these to the best of my abilities.
(You can also say that finally the repeated questions got to me :)
If you can say, has the growth in MySQL usage mirrored to any extent the
growth of Linux, especially in commercial and ecommerce areas normally
the hunting grounds of Oracle and the like?
I think we are growing in the same speed as Linux; We are on almost
all Linux distributions, (except RedHat) and we are also quite used on
other platforms (including Windows).
What OS binaries get downloaded the most from MySQL.org?
I really don't know about MySQL.org (this is just a mirror of
MySQL.com). On MySQL.com we have the following statistics (from
This is download of MySQL version for different OS from our main (but
slow) mirror during 1999: Note that we count only unique IP:s !
MySQL-source : 80998
linux : 65255
MySQL-win32-shareware : 51692
solaris : 19208
bsdi : 4969
irix : 4345
aix : 3554
sunos4 : 3193
freebsd : 2942
sco : 2901
osf4 : 2398
hpux : 1422
unknown-openbsd2.1-i386 : 1002
openbsd2.5-i386 : 391
pc-unixware7.0.1-i386 : 138
osf3.2-alpha : 126
Note that the win32 shareware version didn't exist on our mirrors
until half of 99; Before this it was always downloaded from our site!
With more than 50 mirrors, the above doesn't give any indication of
of how many MySQL version really has been downloaded; It should however
give a good indication of the distribution between different OS.
How will recent announcements from Andover.net affect development?
It basicly meant that two of the MySQL developers have put replication
highest on their TODO and are working on this (and related issues) full
They'll call the shots for a while as to which direction development
Not really; They just request that some certain features should be
implemented within a specified time frame and we have to try to adjust
How much influence does money have vs what you see on the
lists/web when it comes to development? (users vs commercial interests..
are they much the same in the end?)
We are not taking projects that we don't think will be of the benefit
for MySQL as a whole; Replication is in a sense the ideal project to
get sponsoring for as we have thought about this for a long time and
have had warm feelings for this. They are in only pushing us in the
right direction a little faster than we would otherwise have done, but
not that much. In other words, the ideal way to get funding. All the
things we do for Andower.net is of course put into the standard MySQL
version and the new technology will benefit all MySQL users who in the
long run will want to use the new features as their business grows.
We are always going to prioritize bug fixes before anything else; The
Andover.net sponsoring is not influencing this in any way!
All the money we get from Andover.net (and similar projects) is also
put into getting more MySQL developers and paying these to work on
MySQL. This means that being sponsored will only affect the normal
users in good ways as we have now have more developers to attend to
If you have worked on proprietary software in the past where you did the
coding and marketing sold the product, how does it compare to working on
a project where you are exposed to the users so much? Tiring, causes
disillusionment, or invigorating and full of ideas? Or somewhere in
Before MySQL, I only worked on proprietary projects and I have to say
that MySQL was a very refreshing change. I haven't had any
disillusionments so fair and every day seems to be full of new
ideas. We do of course also feel a little tired as we nowadays tend to
sleep more before the computer than in bed.
When will stored procedures make their way into MySQL?
When we have a embedded script language. The optimistic target date is
later this year.
Is there any particular reason why you do so much work on
MySQL? What I mean is what drives you to work on MySQL,
instead of say KDE (or something else)? Is it that you are
simply more a database guy rather than, for example, a UI
guy or is there more to it than that?
I have always liked to work on the low level and getting things done
as fast as possible. I think this mentality has driven me more to
databases than to GUI applications (even if I have also done some of
these (including games in assembler) in the past).
If you had a chance to work on anything that wasn't MySQL
related, what would it be, and why?
Maybe on an OS kernel or on compiler related stuff. Anything where
speed and algorithms are important.
Kevin Lyda asked:
If you are going to add advanded features such as
transactions/rollbacks, and outer joins,
can it be done without harming those of us that don't want to use them -
i.e. people that want quick
and fast databases?
Yes; This is one of the main goal with MySQL; We couldn't use MySQL
at TCX if we couldn't maintain (and increase) the speed of MySQL.
When writing code that accesses databases, do you have a prefered method
- C, C++, Perl, Java, Python, etc?
I like to write portable code when accessing databases and in this
case I like to use Perl through DBI.
Just curious, RedHat is working to make the backend of their Bugzilla
be an Oracle database. Bugzilla normally uses MySQL. While that might have
more to do with commercial reasons have you seen any mail from RedHat
folks regarding problems with their MySQL installation?
No, RedHat have never mailed us about any problems with MySQL. I think
the main reason is that they have got convinced by Oracle that they
need to have a 'professional database' (which by Oracle's sales force
means 'support transactions and is made by us') to get to the high
profile customers. However when MySQL version with transactions is
released, I can't see a single reason why anyone should use Oracle
instead of MySQL for Bugzilla. (If course, if someone REALLY likes to
burn money, they are free to do so).
I have been a little disappointed with RedHat that instead of talking
with us about this they have decided to take the totally commercial
road (If they have convinced Oracle to be Open Source, then I am of
course totally wrong in the previous statement and in this case RedHat
is doing the right thing).
MySQL appears to be incredibly popular. Have you gotten grief from people
having a problem with the obviously anti-Microsoft licensing agreement of
MySQL. And as an add on, have you ever had to get tough with non complying
sites which operated unlicenced even though they needed one?
We do get a mail every second day from people that ask us why we are
'unfair' to Windows users. They don't like when we reply that we 'In
effect we let users that run a commercial OS (Win95/Win98/NT) pay for
the development of tools for free OS (like Linux)'.
The main reason for having a different license for Windows is that we
had a real hard time finding a single high qualified developer that
would be interested to work on Windows when he has the option to work
on Unix. The net result is that I have myself have been forced to
build and test MySQL Windows releases and I haven't been prepared to
spend so much time as needed to do this without getting paid for this.
Another issue is of course that all development tools cost a lot on
Windows and we have to get this investment back somehow. This is of
course little compared of the time you loose when you have to working
with inferior tools. (With inferior in this case I mean that we
haven't been able to automaticly generate and test a MySQL version
from a MySQL source tree without a lot of user interaction).
The good news is however that we have now finally found a developer
that would like to take over the compilation and testing of MySQL
under Win32 and when we has done this, we will probably release MySQL
on Windows under the same license as under Unix.
We do know of a lot of sites that uses MySQL without a license, but
generally we don't really care that much about this. If they haven't
payed for MySQL they have probably a good reason for this (like that
they can't afford it) and in this case we think it's better that they
use MySQL than anything else :) It would be of course another matter
if someone sold a product with MySQL without paying.
Do you work fulltime on MySQL (does it pay for itself?)
Yes, I work fulltime on MySQL and it has been profitable from
the start. Even if we have started to hire new employers at a ever
growing rate, the income has kept up with this. On the other hand, we
put everything we get into making MySQL better, as we live to make
MySQL the best possible database for any type of application.
Is MySQL basically finished or is there a load of functionality
still in the pipeline. Is there a formal comparison table of MySQL vs
Postgres vs Oracle for instance?
No; MySQL will not be finished as long as there is another feature or
optimization that we think should be in the SQL kernel (we don't
however believe that everything, like a web browser, should be in the
SQL server). Our vision is to make MySQL the default database on
Linux and all other OS, and to do this we have still a long way to go.
(Just compare to make Linux the single OS on ALL hardware platforms).
While working on MySQL I soon found a need to be able to compare it
with other SQL servers and also get a good feeling of what part of the
SQL standard they others did support. For this purpose I wrote crash-me,
which is an automatic programs that finds out the capabilites and
limits of any SQL server that supports the perl-DBI interface. We
have presented the results at
http://www.mysql.com/crash-me-choose.htmy and this is one of our most
accessed pages! I personally think the pages is very useful for any person
that wants to ensure that his application will run with many different
SQL servers or just want to port an applications between two SQL servers!
To be able to benchmark different MySQL versions (and to ensure that
we always improve over time) and also to check how MySQL compares with
other databases, I wrote the MySQL benchmark suite. The idea with
this is not just to calculate a total TCP like number for a SQL server
(which is pretty useless for most database users), but instead provide
a number for each different important functionality. The results
makes it much easier for database users to get an idea of how
different databases will work with their applications. I got help
from Luuk de Boer to port and run the benchmark on a lot of different
database servers and we have presented the results at
The two above tests gives a quite good indication of in what areas
MySQL is better than most (if not all) other SQL servers and in which
areas we still have to do some improvements. I think we stand up quite
good to the competition :)
About the author, Ken Guest.