[The GoingWare Manifestoes] [crawford@goingware.com]

The Cross-Platform Manifesto

Michael D. Crawford
October 19, 2000

Copyright © 2000 Michael D. Crawford. All Rights Reserved.

From an email I sent to some friends on October 10, 2000, with snippets from some other letters and relevant quotes inserted. I intend to rewrite this for the Zoolib web site, but I feel that it is important to post it as it stands on my own page.

The opinions herein are purely my own, and may or may not represent the opinions of any other person.

I've recently started corresponding privately with an engineer at a software company who took an interest in me after we'd discussed some programming issues in the developer newsgroups.

I sent him the following just now. While I just wrote it, it contains a lot of thoughts that have been brewing in my mind over the last few months, and in fact some of them for years, as evidenced by the page (given below) about why I originally decided to become a BeOS software developer.

My friend Andy Green has written a perfectly wonderful software library that he's calling Zoolib. He's going to release it to the public soon, as an open-source software product. While he may not feel as strongly as I, part of the reason Andy wrote Zoolib in the first place was to insulate himself from the brainless and cruel things that computer operating systems vendors do to developers such as he and I.

I think it is typical of Andy that when he saw that Apple was not a reliable source of support for developers like him, he didn't raise his voice in protest, but instead wrote a piece of software that was designed to insulate himself from Apple's lack of common sense. Originally he just meant it for his own use and didn't plan to distribute it at all. But in doing so he made a much louder statement than anyone could make with words - he created an enabling technology which could prevent any operating system vendor from having a chokehold over any third-party developer ever again.

I offerred to Andy to write the web page for Zoolib, and what I suggested I'd like to say about why people ought to use Zoolib, why it is good for the developer and the public at large, is discussed in the following. This is my very first shot at writing it, and so it is quite blunt and might sound a little driven - just ask Dave (davej@be.com) - anything I post on the net that's longer than a couple paragraphs usually sounds pretty driven.

I'll do my best to make it sound more lucid for the website.

I'd like your comments.

Remember, it's for a very good reason that I say "Tilting at Windmills for a Better Tomorrow". I started using it for my email signature in the Spring of '85 and I've had no other since.

I talk about something called Word Services in what follows. Word Services is a communications protocol that I developed while I was a programmer at Working Software. After I left the company, I worked with WSI as a consultant to bring Word Services to the new Be operating system. You can read about it at http://www.wordservices.org - what it does is allow you to link a spellchecker, grammar checker or other text service into the menu of a word processor, email client or any program that edits text.

I feel that Word Services is one of my finest accomplishments as a programmer and software architect. In practice, it works really well and for the most part the companies that adopted it in their products and the end-users who work with it are really enthusiastic about it.

But I'm sad it say it has never been a commercial success and in fact the first software product I developed on my own, the BeOS version of WSI's Spellswell, has hardly brought in enough revenues to buy dinner at a nice restaurant for those of us reading this email. I'm convinced that this has nothing to do with technical problems but with the failure of the two companies that stood to benefit most from it to take notice of it and promote it - Be (http://www.be.com) and Apple.

While this is a predominant source of the anger that motivates me to write this, it's not the only thing; I've been in the software industry for a long time now and I have to say that I've never in my life seen such an vast array of charlatans and clever schemes designed to enrich the corrupt at the expense of the public and the small companies who work and depend on the big corporations - in this case the corrupt are the operating systems vendors and the independent companies are the small software developers like me amd Working Software.

My background is in pure science, I spent my whole childhood and teenage years working to be a scientist of some sort and when I started college I studied astronomy ( I did research on the 60 inch and 200 inch telescopes at Palomar Mountain), then switched to physics (I also did research with the particle accellerator at CERN in Geneva Switzerland). ( Read about my experiences with software development in High Energy Physics)

It is only because of a devastating illness that I left science and went into software engineering, which for some reason I'm able to live well in while I could never live peacefully in the academic world.

In the world I came from pursuits like software development were supposed to be clean and pure things, exercises to stimulate and enrich the mind and advance the cause of reason and promote the betterment of human existence.

Instead the industry which appears to be the main driving force behind the tremendous recent growth of the world economy, especially the US economy, is in my opinion a cancer that is desperately in need of the surgeon's knife.

I've been working full-time as a software engineer for thirteen years now. While there's work I do not yet know how to do, I'm pretty senior in my field and I can do work now that would scare the wits out of most programmers. I've been putting a lot of time in the last few months into thinking what I'd like to do in the near future, and also over the rest of my life, to make a better life for myself and my new family and ultimately to leave my mark on the computer industry.

It used to be that what I wanted to do was write some really cool program, a program that other people would be using for years on end, a program that in some form would outlast me. Examples of such programs that others have written would include Perl, Emacs (reading the source code to emacs was what convinced me to persist in working as a programmer in the early years - I used to realy dislike programming), the linux kernel, yes the BeOS, the Apache web server, the Gnu C compiler, the C++ programming language and so on.

But would it be worth it to just write a program in send it out into the world when I see all this corruption?

Software in itself is an amoral thing; it really is neither good nor bad in and of itself. There is technically superior code, and it is important to me, very important, to have the professional respect of my peers in the engineering profession. There is software that can be used to serve good, but ultimately it is the people who use the software rather than the software itself that is good.

I still want to write my big cool program. When I do, I want to write it and give it away for free with all the source code. I'm not yet in a position to do that, and I don't yet have any concept what my "great american program" will even be.

No, what I'd like to do is to do some good. Lasting good.

I'd like to clean up some of the corruption in the computer industry. One thing I can do is expose it by writing about it, writing web pages about it and stuff. For example, these two web pages discuss the corruption inherent in the business of high-tech personell recruitment:

Market Yourself - Tips for High-Tech Consultants
http://www.goingware.com/tips/marketing.html

Important Note for Recruiters and Contract Agencies
http://www.goingware.com/notes/recruiters.html

Writing those pages has gotten a huge response, in terms of page views and emails from other engineers with their own stories to share about dealing with dishonest recruiters. But it's really not that big an issue in the greater scheme of things. The current practice of agency personell recruitment is a pestilence on the order of lice but what I'm really worried about is more like the Black Plague.

I think the corruption of the software industry is something that's important to work towards cleaning up. It's taken me a while to evolve in my thinking about what ought to be done, but I feel that one thing that is necessary is to take the power of the operating system vendor, in fact any API vendor, to use independent developers to serve their private needs away from them.

This will serve the public too. Because if independent software developers are not locked into any particular platform or API, they will ship alternative versions of each of their products for any OS that is available, and so if a computer user is unhappy with one platform, they can readily switch to another without concern that a solution to one of their problems won't be available on the new platform.

If both these things can come about, then operating systems vendors will have to serve the need of the public and the independent developer, not the other way around. The OS vendor will know that if they don't keep their developers very happy they'll just ship a product on a competing OS with a development effort that lasts days, not years. They will know that if their OS suffers from quality defects or they do not provide adequate support to their users, their user will take their business elsewhere.

This isn't something I can do on my own, I recognize that fully. But as the folks who wrote the Cluetrain Manifesto ( http://www.cluetrain.com) have discussed, it is within the power of the individuals to start the process and the rest of the public to join in - this because of the instantaneous communication and ready access to information provided by the Internet.

Regards,

Mike

Michael D. Crawford
GoingWare Inc. - Expert Software Development and Consulting
http://www.goingware.com
crawford@goingware.com

   Tilting at Windmills for a Better Tomorrow.

My original letter to that engineer follows:

Hi again,

I'd originally typed this into the previous letter but I thought it should come out on its own. I'm going to send it separately to some friends (as you asked to stay private - I won't tell them who I'd originally sent it to) and maybe once Zoolib is released post it on alt.usenet.manifestos. I'm going to write most of the web page for zoolib.org so I'll draw on this for material but make it sound a little less like a crazed rant.

On the other hand if you want to send this around to anyone who might be interested feel free. I understand (edited - your company) has had a long and perhaps at time difficult relationship with both Be and Apple...


I'm afraid not much of substance came of my work with Word Services on the BeOS. Spellswell was to be my first independently developed product (it was written by Working Software for the Mac, but they gave me the source code to write the BeOS version. I receive royalties for it that would be generous if there were actually any sales).

This pretty much sums up my feelings about my relationship with Be after a couple years of being one of their most loyal developers and one of the few who actually shipped (and still maintains) a real commercial product for it. Spellswell was in fact one of the very first independently developed commercial BeOS applications:

Some of us work for a living
http://www.escribe.com/software/bedevtalk/m20029.html

In that post, I give the URL to the page that discussed the reasons I gave up MacOS development (I even used to be an OS engineer at Apple) and took up BeOS development instead - I got into BeOS development during BeOS DR8, not the earliest but pretty early:

I'm worried about my future. That's why I'm a Be developer.
http://www.scruznet.com/~crawford/Computers/whybe.html

That page has been on the net for a couple of years, and I've posted the URL widely on newsgroups and mailing lists. So after having stuck my neck out so far to put distance between myself and Apple, you know I must have been pretty fed up to post the bedevtalk post above.

What am I going to do about it? In part I'm tending towards GNU/Linux. I'd like to do work to bring higher quality and nicer UI to the GNU/Linux experience. But working with the GNU/Linux community is like herding cats. And they're not too receptive to a long-time Mac programmer telling them their code sucks and they'd better shape up if they want to succeed.

The main thing about GNU/Linux is that no company is in control of it. Red Hat did a pretty good job for a while of making the public think it was, and Corel has been actively trying to control KDE ( they submit bugs to the KDE team whenever they find something in the UI that doesn't live up to the Microsoft Windows UI guidelines!) but really the nature of it is that no one can be in control.

While I want to do more on GNU/Linux what I'm really trying to do is get my buddy Andy's cross-platform library out to the world. It's almost ready for release. I think it would have been fine to release it two years ago but it's Andy's little baby and he's got VERY high standards for his code.

I'm really tired of companies that don't represent my interests trying to use my time and energy to serve their material ends. I thought Be was different and I got burned - badly. I could just go to some other OS, and GNU/Linux would be a natural choice, but what I really feel is the best course of action is to put an end to the whole issue.

After some time spent learning the basics of C++ (after 13 years on the job as a programmer) and feeling very rewarded by it, I posted the original of this page on Slashdot:

Study Fundamentals, Not APIs, OSes or Tools
http://www.goingware.com/tips/fundamentals.html

The essence of the article is that one should concentrate and acquiring knowledge that will serve one well on any project, rather than devoting a lot of time to learning the intimate details of some proprietary API.

It's not just that it makes you more flexible, and I think it's a much more pleasant way to live - it means you're not locked in.

Every OS vendor works very hard to acquire developer mindshare and then - this is critical - to get those developers to write applications to the native API of the OS. Both Apple and Microsoft are very heavily into writing APIs that are very platform specific and then not providing compatible versions of them on other operating systems.

I think this is evidenced by the statements made in the judge's findings of fact in the Microsoft trial. Part of the reason the judge felt that Microsoft was so out to get Netscape was not just because Netscape would end up owning the web, but - just as critical - the Netscape plug-in API (and I guess the netscape server plug-in API) provided a platform for writing applications that would work on any platform from a common codebase.

In this case, Microsoft early on recognized middleware as the Trojan horse that, once having, in effect, infiltrated the applications barrier, could enable rival operating systems to enter the market for Intel-compatible PC operating systems unimpeded. Simply put, middleware threatened to demolish Microsoft's coveted monopoly power. Alerted to the threat, Microsoft strove over a period of approximately four years to prevent middleware technologies from fostering the development of enough full-featured, cross-platform applications to erode the applications barrier. In pursuit of this goal, Microsoft sought to convince developers to concentrate on Windows-specific APIs and ignore interfaces exposed by the two incarnations of middleware that posed the greatest threat, namely, Netscape's Navigator Web browser and Sun's implementation of the Java technology. Microsoft's campaign succeeded in preventing - for several years, and perhaps permanently - Navigator and Java from fulfilling their potential to open the market for Intel-compatible PC operating systems to competition on the merits.
-- Conclusions of Law and Final Order
-- Thomas Penfield Jackson, U.S. District Judge

Although not a whole lot has come of netscape plug-ins (because they're a drag for users to download and install), microsoft felt very threatened by them. You could write a Windows application as a plug-in, maybe offload a lot of functionality to a server, and the same plug-in would work just as well on the Mac from the same source base.

MS was equally threatened by Netscape putting Java into the browser. And look how much effort MS has gone to to keep Sun from succeeding in making Java a "run-anywhere" platform. I recall the judge gave other examples, for example IBM's support of Lotus (Notes is a Windows-independent platform, and Microsoft gave IBM a lot of grief on their license terms for bundling Windows with IBM computers).

78. Although they have been the most prominent, Netscape's Navigator and Sun's Java implementation are not the only manifestations of middleware that Microsoft has perceived as having the potential to weaken the applications barrier to entry. Starting in 1994, Microsoft exhibited considerable concern over the software product Notes, distributed first by Lotus and then by IBM. Microsoft worried about Notes for several reasons: It presented a graphical interface that was common across multiple operating systems; it also exposed a set of APIs to developers; and, like Navigator, it served as a distribution vehicle for Sun's Java runtime environment. Then in 1995, Microsoft reacted with alarm to Intel's Native Signal Processing software, which interacted with the microprocessor independently of the operating system and exposed APIs directly to developers of multimedia content. Finally, in 1997 Microsoft noted the dangers of Apple's and RealNetworks' multimedia playback technologies, which ran on several platforms (including the Mac OS and Windows) and similarly exposed APIs to content developers. Microsoft feared all of these technologies because they facilitated the development of user-oriented software that would be indifferent to the identity of the underlying operating system.
-- Findings of Fact
-- Thomas Penfield Jackson, U.S. District Judge

Well I'm just sick of being a pawn in these power games. I chose quite freely, knowingly, to initially become a Mac developer because I felt it was a better platform, and when I chose to become a BeOS developer I felt that I actually had a significant role to play in making Be succeed and providing users with a real choice. I felt that I was voting with my brain and my keyboard and that as an experienced developer my vote was weighted out of proportion to most people's.

Well now I feel used, both by Apple and by Be. There's no end to the number of people who feel used by Microsoft! And while GNU/Linux presents the possibility of an improvement on the situation - no central control - there's no question that many of the people that are in positions of power within the GNU/Linux community got that way because they wanted to accomplish some goal they felt was of great personal importance, a goal which might not mesh with Mike's continued happiness and well being.

Just look at the whole reason Gnome got started, they wanted a GPL'ed UI because the QT library had a restrictive license and they decided to crush KDE. (See KDE's Response to Gnome Foundation). And to top it off Gnome is written in "object-oriented C" and they do that because they feel it is right - they hate C++ in the Gnome community, and spare no effort to work around limitations of C to do things that would be trivial in C++ or any other language that had support for object oriented design in the language!

Well, so what am I going to do about it? I'm going to give my very best effort to bring Andy's cross-platform Zoolib to the world. Zoolib allows you to write a single set of C++ sources and recompile them for MacOS, Windows, BeOS and POSIX flavors like GNU/Linux.

ZooLib requires only very basic support from the operating system for things like rendering simple graphics, bitmaps and text on the screen, window management and threading (a handrolled thread implementation is provided for systems that don't support preemptive threads). The platform-specific layer is clean and localized enough now that ZooLib could be bounds to a totally new platform like, say, QNX in two or three weeks of work.

Part of my deal with Andy in getting to use Zoolib before anyone else is that I'll be writing the documentation. I'm good at writing doc for programmers. Also I'll write some sample code, and I've already written some utility classes that, while not critical, make it easier to do certain things that I needed to do in my application.

I've also submitted my first column on cross-platform development to a computer industry trade magazine. This magazine doesn't have that big a circulation among the whole programming world, but is a leader in the part of the industry it occupies, and so I think there will be some visibility there.

I'm not just going to promote Zoolib there, I'll probably just announce it and maybe have an occasional column with examples on using it, but instead I'll argue the case the one should do cross-platform development, give tutorials on how to do it, do surveys of all the existing and new cross-platform solutions I can find, maybe once I get more experience with a few of them I'll publish critiques of them in an effort to get the lot of them to be better, so that every developer will have a choice, and have a good expectation that their choice will be successful for them.

So if someone wanted to ship, say, a Windows application I could suggest to them that Zoolib is a better API than MFC, and even if you're going to be Windows-only you ought to use Zoolib, because it's architected real well and is a pleasure to use.

And if down the road that developer gets screwed by Microsoft I don't need to do anything at all - he'll already know it will only take a few days to port all their Zoolib client code over to GNU/Linux or MacOS. In my own experience, I did the first four months of development of my app on Windows and then it took a week to get the app working on MacOS. Most of that time was spent porting the Xerces XML library to the Mac, very little time was spent working on Zoolib client code.

I can also take advantage of monkeywrenchers. There must be oodles of programmers who work on Windows programs but wish their companies would support GNU/Linux. I can tell them "use this, and ship a Windows or a Mac program. After it's out the door, suggest to your boss that you take a few days out to write a GNU/Linux version."

Now you could say that I'm being just as bad as the rest - I'm trying to get everyone to adopt my API (actually Andy's). But that's not the case. First the reason Andy wrote it was in the very beginning to insulate himself from Apple's API du jour (remember Bedrock?) Andy felt that if Apple went and did something stupid to the developers, if he had his own layer he could just reimplement the OS-specific layer and he'd be working again. But funny thing, just a little extra work beyond that and he'd be cross-platform too...

(Bedrock was a cross-platform library Apple itself was working on. They dropped all advancedment in their own developer tools for a couple of years and spent tens, maybe hundreds of millions of dollars on Bedrock. They never could get it working right and in the end abandoned it. If it hadn't been for a little tiny compiler developer called Metrowerks coming out with new compilers for the MacOS, there wouldn't have been any developer tools at all when Apple shipped the new Macs with PowerPC microprocessors. The compiler publisher that Apple worked with to develop Bedrock - Symantec, also publisher of the Norton Utilities - ended up losing the Mac developer tools market entirely to Metrowerks, and no longer publishes C or C++ compilers of any sort. On the other hand, Metrowerks CodeWarrior was a huge success and eventually was acquired by Motorola - I use their products every day and thing they're just dandy.)

No, Andy intends to release this as free software. Andy and I are both consultants. My short-term interest is in writing products for my clients - and that's Andy's too. My long-term interest is in shipping my own software titles and selling them as my own products, and eventually not being a consultant at all.

I'd have some benefit if others would contribute bug fixes and new technology to Zoolib but that's not really necessary. My experience with it is that it's a great API as it stands today. You might be suprised to hear that about new code but it's really not new code - it's been in use in commercial software products for about five years, it's just that it's been a private API for Andy's use and now the use of me and my beta testers. It's a mature platform.

Also, while many platforms lock you in, Zoolib doesn't. For example, Java is not really platform independent, it is a platform unto itself. Just try making use of platform specific code in a Java app - I was completely frustrated by the inability of the javax.comm serial communications package to show the icons for the Phone and Printer ports when it was run on a Mac.

You can write native libraries that are callable from Java, that's how the serial drivers for javax.comm work, for example. But it's really a drag, and I don't see how you can meaningfully work with them in a source debugger.

Suppose you were writing a Zoolib application and you wanted to work with COM when you were on a Windows machine:

#if ZCONFIG_OS == ZCONFIG_OS_Win32

 // do com stuff here

#elif ZCONFIG_OS == ZCONFIG_OS_MacOS7

  // can't do com, do whatever works on the MacOS here

#endif

it's that simple.

I think in fact Java suffers from trying to be a complete platform without any need for the application developer to escape to native code. There are cases in Zoolib where it doesn't make sense to be platform-independent and in those few cases you just break out to platform specific code.

For example, file open dialogs filter by the three-letter filename extension on windows and the type code on the Mac - but even in those cases Andy's provided API's which fit the style of Zoolib, that use Zoolib classes for their parameters, it just that the actual filepanel you instantiate is only defined for one platform.

I think there's only one or two lines of code in my whole app where I had to just drop out and do some naked windows programming. There's a few places where I have to parse pathnames differently.

So no, my objective is not to put me on top of the platform heap - it's to pull the rug out from under it so that no one can be on top any more. It's to put the power into the hands of the individual developers and small companies rather than huge corporations and individuals whose personal wealth is greater than the GDP of many nations.

Instead, companies will have to win market share the old-fashioned way - by actually writing quality code and serving the needs of their customers rather than using programmers as tools to achieve their ends and holding their customers captive because they can't move to an alternative platform and still find the software that solves the problems they have in their lives and work.

I leave you with the following, from which I draw a great deal of inspiration:

There are no significant bugs in our released software that any significant number of users want fixed... The reason we come up with new versions is not to fix bugs. It's absolutely not. It's the stupidest reason to buy a new version I ever heard... And so, in no sense, is stability a reason to move to a new version. It's never a reason.
-- Bill Gates, as quoted in The Software Conspiracy

Yours,

Mike

Michael D. Crawford
GoingWare Inc. - Expert Software Development and Consulting
http://www.goingware.com
crawford@goingware.com

  Tilting at Windmills for a Better Tomorrow.
[The GoingWare Manifestoes] [crawford@goingware.com]