Showing posts with label microsoft. Show all posts
Showing posts with label microsoft. Show all posts

Tuesday, January 10, 2012

Restoring Old Computers

Now that I'm fairly well adjusted to my new, happier, life working at Google on Android, I'm returning to blogging with a series of articles on one of my favorite hobbies: restoring and reusing old computers. I'm going to focus on three very different computers: the Commodore Amiga, the DEC Alpha, and the Apple IIe.

What do these systems have in common (besides having names that start with the letter A)? The main feature that attracts me is that none of them uses an Intel processor or runs MS-DOS or Windows (and they're not Macs either). So if your definition of PC is a generic personal computer, then they all qualify, but far more people use the term PC primarily to mean a very specific type of computer, namely one with an Intel (or compatible) "x86" processor that runs Windows (as in Apple's famous Get a Mac ad campaign).

If you're under 25, you might be too young to remember this, but there was a time before Microsoft's relentless, predatory, and sometimes illegal, business practices forced nearly the entire computer industry to standardize on their Windows-branded operating systems, and the Intel, or Intel-compatible, CPUs that ran the most compatible flavors of Windows. It was a time of great innovation. For example, the first Web browser was invented (along with the early versions of the HTTP and HTML protocols that serve as the backbone of the Web itself) by Tim Berners-Lee, on the NeXT computer and OS, Steve Jobs's ill-fated proprietary UNIX-based platform of the 90's, which was failing miserably in the marketplace, despite being quite advanced technically, and would have disappeared completely from the mainstream, just like the Amiga, the Alpha, BeOS, OS/2, and many other quirky and often cool platforms disappeared under the onslaught of the MS-DOS/Windows juggernaut, if Mr. Jobs hadn't been canny enough to convince Apple to bring in their company, at which point Steve worked his way back into the reins of power and NeXTSTEP became the foundation of the now amazingly successful Mac OS X.

The significant thing about the invention of the Web is that it might never have happened if Mr. Berners-Lee was working on a PC running Windows, because that platform simply wasn't capable of designing something like a Web browser without running into all sorts of annoyances and weaknesses of the platform. He might have written the first Web browser on an Amiga, or perhaps on a Mac, but I think it's fairly well established that NeXT had the best development environment if you wanted to create powerful and reliable software with an extremely small team (Berners-Lee worked with another computer scientist and an intern) in a short amount of time. Anyway, Windows took another 10 years before its development tools had really caught up to what NeXT (itself a very small company) created back in 1990.

Similarly, the PC hardware of the 90's left a lot to be desired. For example, non-autoconfiguring devices, such as cards for the standard 8-bit and 16-bit ISA bus included the fun activities of setting jumpers or DIP switches on the card to manually select a port range, IRQ, and possible DMA channels to use, making sure your choices didn't conflict with other cards on the system, and editing your CONFIG.SYS and AUTOEXEC.BAT startup files to inform the OS and programs of your choices, along with possibly spending time trying to get all your MS-DOS drivers to load into "high memory" in order to maximize your "conventional memory" below 640K, and a whole bunch of other annoying stuff that I remember wasting literally hundreds of hours on myself as a young PC hacker before the PCI bus came along and things slowly started catching up to what the other platforms had been doing right all along.

That's one reason I want to point out the Apple II, because Woz had "Plug & Play" functionality in the Apple II in 1977, and IBM didn't bother to make their PC similarly user friendly, even though it came out 3 years later, and had the full weight of IBM's engineering resources (compared to a single geek in a garage). IBM didn't rectify this mistake until 1987, when they introduced a new proprietary computer bus called MCA in the PS/2 series, which other vendors couldn't use in their PC compatibles without paying patent royalties to IBM. This didn't sit well with Compaq, HP, Tandy (remember them?), and the rest of the Gang of Nine, who created their own alternative architecture called EISA which also didn't catch on. VESA Local Bus was another short-lived standard for video cards, but eventually PCI won out and we're better off for it. But the "PC compatible" architecture still includes a lot of legacy junk from the ISA days, even though it's all emulated inside a single chip these days.

The Apple II has auto-configuring cards, my two Alpha workstations use PCI (including a few slots supporting the rare 64-bit variant) and the Amiga includes a proprietary auto-configuring bus called Zorro.  So at least from a usability perspective, they're all as friendly to upgrade as a PC from the year 2000, and far superior than the PC's of just five years earlier. Similarly on the OS front, as MS-DOS and Windows (particularly the 16-bit and CE variants) were similarly broken and pathetic compared to the far more capable OS's of the other platforms, and it wasn't until Windows XP that the PC-compatible industry had an OS that was both easy to use and not completely broken when compared to a typical UNIX system. You could make the same argument about the Mac's OS, which didn't really get good until Mac OS X 10.3 came out in 2003 (in my opinion).

What did UNIX (and other heavy-duty OS's like VMS) do that the wimpier platforms like DOS and Windows could not? Well, quite a number of things. Virtual memory that protected buggy apps from being able to bring down the system or interfere with each other. Support for multiple users, with file system security so users couldn't access each others files without permission or modify critical system files. The X Window System, which evolved quickly from simple beginnings because it was extensible enough to support a variety of different approaches that evolved the platform to become more user friendly and better looking, such as the popular commercial graphical toolkit called Motif (now available as open source), and today's GTK and Qt platforms that form the basis of the popular GNOME and KDE desktops on Linux and other UNIX systems. X has been so wildly successful that one of the nice features of Mac OS X (for a UNIX geek at least) is Apple's inclusion of an X server with the OS, which makes running any type of UNIX app really easy, as compared to Microsoft's half-hearted efforts to provide UNIX compatibility in Windows, which they only grudgingly seem to support.

So I'll be running UNIX on the Amiga and the Alphas, specifically the NetBSD flavor, which is open source, and well supported on a huge number (57 at last count!) of different platforms, including x86 PC's, of course. I've been running the Amiga version of the 5.x stable branch, and it has been rock solid reliable for me. I'll be switching over to the current branch that will become NetBSD 6.0, so that I can help fix bugs and submit a few changes and improvements that I've written to the NetBSD community (the current branch is where active work is done for new features).

I'll have more to say about NetBSD and the Commodore Amiga series in the next post, so stay tuned if you're interested in this sort of stuff. Comments and feedback welcome. I also have a Google+ post about some hacking I did to get CD quality audio out of the Amiga, something that I didn't think possible until I learned about the 14-bit hack, the Paula calibration hack, and the 31.5 kHz video hack.

Saturday, December 26, 2009

A Few Thoughts on Microsoft

Hi everyone. I apologize for dropping off the face of the planet these past few months. I had to take a break from everything in order to recover my mental health after the extraordinarily stressful experience of working for Microsoft in the year after they acquired Danger, my former employer. I've been working on a couple of pretty interesting projects, including the imminent completion of a hobby project that I've been working on for the past 10 years, which I will write about as soon as I finish this post. But first, I want to post a few thoughts about my experiences and lessons learned from my unexpected and unplanned year of working for the Borg.

I can sum up the experience of working for Microsoft in 2009 in one word: embarrassment. For such a large company, with so much money and so many smart people working there, the lack of any high-level organization, coherent technological vision, or any semblance of "best practices" in software engineering was quite disturbing, and I was unprepared for the chaos that beset Danger almost immediately after we were acquired, hoping that the Microsoft corporate brain damage would not infect our organization as completely and as rapidly as it did.

The disorganization, the frequent delays due to broken tools and broken servers (for SharePoint, email, source code control, etc.), and the extreme and constant pressure from management to try to force the team into meeting completely unrealistic schedules (particularly considering the poor quality of the Microsoft tools we were forced to use), were the cause of a great deal of misery suffered by our team, but the primary reason for my resignation was the completely miserable and unproductive experience of being forced to develop for Windows CE, the OS foundation for Windows Mobile.

In my professional opinion, Windows CE is easily the worst embedded OS that I know of. I used to think that Symbian OS was weird and clunky (I did some Series 60 development for a startup before coming to Danger), but now I would happily write code for Symbian or any other mobile OS, knowing just how much worse the Microsoft alternative is.

I would therefore not recommend for anyone to buy a "Windows phone". After working extensively with Windows CE and the Windows Mobile telephony stack, I don't trust the quality of the code for anything as mission critical as a mobile phone must be, and therefore I can not in good faith recommend Windows Mobile to anyone, especially when there are so many other great choices these days.

All of the code that I worked with gave me the impression that it was written entirely by 23 year olds who came to MSFT straight out of college. After all, many MS employees did go there straight from college and have no other work experience to compare it to, which I believe has stunted their growth as engineers and prevented the majority of them from picking up the seasoning and design experience normally picked up by junior engineers through working with more experienced senior engineers. I think that also explains why so many are willing to put up with the psychological stress of working there, because if more of them had the experience of working at a "normal" software company to compare Microsoft to, more of them would certainly quit!

Because Microsoft has not built up a corporate culture for software engineering, they seem to be perpetually stuck in the "hacker" mindset of throwing stuff together and then having to deal with the aftermath of their poorly thought through designs. It's a real shame, especially considering that The Mythical Man-Month was written back in 1975, and yet our team routinely had to deal with gross violations of the very sensible recommendations made in that book and others.

At any rate, it took me a few months to recover, but fortunately I seem to have made it through the experience with no permanent psychological damage, and without all the bitterness and hard feelings that I would otherwise have had if I hadn't taken the time out to think through the experience in order to put it all behind me. The previous link is to a blog written by an anonymous Microsoft manager which is noteworthy not for its posts but for the thousands of comments posted by other anonymous Microsoft employees about their misery, frustration, and anger. Just click the comments link on the most recent post and start reading (the comments tend to have no relation to the posts anyway) and you'll get a better idea of just how messed up things are throughout the entire organization than I could hope to convey based only on my own experience.

I did not want to become one of those angry, bitter, ex-Microsofties, so I quit while there was still time for me to avoid that fate!

Monday, July 6, 2009

Leaving Microsoft

[UPDATE: I was convinced to stay on the project so I won't be resigning Microsoft after all. I'm still very frustrated by a lot of aspects of the company, but so are a lot of people who work here, so I'm not alone. More posts to come soon about unrelated tech stuff.]