A question that I used to be asked all the time (and even to this day am still asked on a regular basis) is Why did Microsoft create MSLU?
I’ll see if I can shed some light on this today.
(Sometimes people ask less charitable versions of the question, like Why did Microsoft wait for so long to make MSLU? or Why did you wait to make MSLU until it was too late? but I’ll stick to the nice version of the question!).
Note that at the time it was written I was not yet an employee of Microsoft, so I was definitely not involved in all of the core strategic decisions behind why a product ships. Think of what follows as a bunch of somewhat educated suppositions, many years after the actual events took place.
As it is also the story of how I got my first contract with the group that I subsquently joined MS as a full-time employee, it is very much related to why I work where I do!
Anyway, here is the story….
Back some time in 2000, I was first starting to look at the globalization namespace in the .NET Framework. There was not much in the way of documentation available to me, but I did find a detailed spec that told a lot of the story but still left me with some questions. I noticed that the author (Julie Bennett) was a software design engineer, who I did not know. So I sent her a piece of mail asking if she was free for lunch some time to talk about some System.Globalization stuff. I did not hear back from her right away, so i figured she was not comfortable talking about it prior to release since I was not really working on any of the development teams involved with the project….
Then she emailed me out of the blue and mentioned that she remembered I had asked about lunch, and if I was still interested she had some time the next day. I thought — Cool! I can fine out about these things that do not seem to be captured in the spec!
She had a very different set of motivations, though.
You see, for many years she had been trying to convince people of the need for a Unicode layer for Windows 9x, because too many people needed to write for all platforms and so for ease of release management were not writing unicode applications. Even articles like the one F. Avery Bishop wrote for MSJ back in 1999 (Design a Single Unicode Appthat Runs on Both Windows 98 and Windows 2000) were not making a huge dent in this problem. And it would really hurt the whole story for international support if new “Unicode only” languages would not work in third party applications.
So for her, this lunch was sort of an informational. She had a project in mind and thought that I would be a great person to work on it. Of course I had a job already and was not looking for a new one at the time, and probably would have said no to lunch if I knew it was an informational. Luckily she did not tell me….
Anyway, at one point we were talking about random NLS stuff and I bemoaned the fact that “THEY” had not just made the whole “Traditional” vs “Modern” Spanish sort thing go away into an alternate sort rather than a new LANGID. She gently pointed out to me (in classic “My Dear Boy…” style!) that the concept of alternate sorts did not yet exist; they were in fact created largely due to the postmortem of the “Traditional Spanish sort” issue to make sure such a problem would not happen again.
But when she laid out the idea of a layer that would be able to let people write Unicode applications that would do incredible things on Windows 2000 while still being functional on Win9x, I was amazed. When she asked whether I would I be interested in doing this project if she could get people behind the idea of making it happen, I think I said Hell yes! or something equally coherent. It sounded like an amazing project to be involved with!
Had I been less dumb, I would have known that “THEY” I was complaining about with the Spanish thing was actually “HER” since she was the developer who owned the area. and would have been quite embarrassed that I wanted a contract from someone who I had just dissed their work. I think she knew that the effect on me would be more powerful if I found out myself1 — which I did, not too long after. :-)
MSLU was an adventure of a project, with sometimes invaluable, often interesting, and always entertaining help from folks like
- Raymond (random Win9x-specific strangeness that he always knew what was causing the problems)
- Bryan (architecture of the MSLU loader, our own private delay load solution)
- Dan (author of the original delayload, who helped Bryan architect the MSLU solution)
- Jay (the mysteries of DllMain, TLS allocation, and eventually Fusion assistance)
- Phil (working without the CRT, since not all Win9x platforms had one!)
- Cathy (the only person in the universe who could ever PM such a project, and also the one who came up with just about every internal and external name we had)
- Mike (assistance with subclassing, Shell team style)
- Gerardo (who has forgotten more about window management and user messaging than most people will ever know)
- Barry (generating and working with thunks)
- most of all Julie (for providing the vision for MSLU in the first place)
Microsoft is an excellent place to work, and folks like these are one of most impotant reasons!
By April 2001, Cathy Wissink and I were able to announce MSLU at the 18th International Unicode Conference in Hong Kong (in a special add-on talk that was not in the original schedule!).
We also wrote an article for the October 2001 MSDN Magazine entitled MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode which talked about both many of the motivations for doing the project as well as technical information about using MSLU.
So why did it take so long for people to see it was an important project to do? It is hard to say (I was certainly not in the meetings Julie would have with Execs about doing the work!), though if I had to guess it would be that everyone had really moved on mentally to Windows 2000 and it took a while to admit that fuller migration strategies were needed to get developers writing Unicode applications. The code name for the project was Godot, based on the Samuel Beckett play Waiting for Godot, which should give some hint as to the feelings of those who knew all along how important the project was yet did not know if anyone else would ever realize it. We just had to wait for it, so we could all be saved.
Though the confusion of many people was evident when they wondered if it was some type of managed reference (i.e. Go.dotnet or somesuch).
A final note for this post. Serge Wautier asked (from the suggestion box):
I always wondered why Begin/End/UpdateResourceA() were not implemented in Win9x. Was there a technical reason ? You recently wrote that all the work had been done to make the API Win9x friendly. Then why didn’t it show up ?
Note that I’m asking just for the historical anecdote. I am an happy user of MSLU
I cannot really take responsibility for this part, it was really due to the hard work of Matt Curland (author of the excellent Advanced Visual Basic 6: Power Techniques for Everyday Programs from which I took code for my own book, making modifications so it would be more internationally friendly). Matt was a full-time MS employee back then and was working on his cool resource editor. He wanted to support it on Win9x, too so he asked me if he could take a look at the code for the resource updating functions BeginUpdateResource, UpdateResource, and EndUpdateResource, and after getting the okay from my management I sent him the source file. After converting it to be able to work on Win9x (which was no mean feat!) he asked if he could ship a DLL with the code, but management was not as thrilled about that idea (the distance between “code to look at”and “code to ship to customers” is a large one!). I cannot remember which of us now, but one of us suggested that to get out of this stalemate maybe it could be added to MSLU. This did sit better with management, so it was added and working well by the 1.0.3703.0 release.
Now I added both “A” and “W” versions because it just seemed kind of insane not to in this case. But all of this happened years after the last version of Win9x ever shipped, and as far as I know no one ever really considered adding these APIs to Win9x. The effort to make them Win9x-friendly was not a trivial one. The only reason it really happened is because Matt is an excellent developer who is fond of full and elegant solutions to problems…. :-)
1 – Incidentally, its really one of the big reasons I took that contract, once approval for the project happened (something that she said was much easier with a development resource raring to go!). It takes a class act to be insulted (even unknowingly and unintentionally) and not treat it as an attack. I decided I wanted to stay at least long enough to learn how to do that sort of thing! Now it is years later, I work full time for Microsoft in the group (GIFT) where she is a Director with over 130 reports. I still have not completely learned the lesson, but there are times that I can see progress….
This post brought to you by “∞” (U+221e, a.k.a. INFINITY)