Is "Framework" the new "Enterprise"?

I think that at some point, "Framework" became a dirty word, and I haven't noticed until now. From Guido's blog:
"Frameworks have no requirement to be minimal in size while maximal in features."

I notice that he describes what makes a good library good, but there is no mention of what a good framework might be. The implied conclusion, of course, is that there is no such thing as a good framework - once you're a framework, you've gone off track and created something that isn't very useful, and you should turn around and go implement a library. Guido is not the first person I've heard make this assumption, but he is the first person I'm inclined to take seriously.

My understanding of the distinctions between "frameworks" and "libraries" is that frameworks, in general, tend to call your code through callbacks, whereas libraries don't need to call your code. Under that definition, all existing GUI-building tools would be "frameworks", but nobody calls them that, the convention in the GUI world is to call them "toolkits". The convention in the business software world seems to be to call them "application servers".

I'm not sure that the definitions of these terms are generally accepted, though. FOLDOC says a framework is "a set of classes that embodies an abstract design for solutions to a number of related problems", and a library is "a collection of subroutines and functions stored in one more files, for linking with other programs". Neither of those definitions say anything about what code calls what other code, or how such things are designed. In fact, the way that they are presented there, the terms are nearly synonymous in the context of Python.

I think that regardless of terminology, all software has the obligation to be minimal in size while maximal in features. Also, software should be incredibly fast and well-documented, and user-friendly. Of course it's usually impossible to be all of those things; the design constraints imposed are a complex fusion of the application domain and the intended audience.

However, in light of the growing acceptance of the word "framework" to mean "a really bad library that started out as an application", maybe we should stop calling Twisted a framework. What's a better word? "Toolkit"? "Environment"? "Integratotron"? Discuss.

A Point of Agreement

R0ml has been quoted by John Udell as saying that Open Source software can replace standardization. Many of the things I consider blogworthy are distillations of a position in an argument I've had with my father, but on this I think we are in violent agreement. Everybody loves a fight though, so I'll try to state this as antagonistically as possible - arguing against Mr. Udell's commentary. He raises three potential objections, asking if the idea is wrong in principle.

Objection: We don't write programs that way.
Who's "we", kimosabe? Speaking for groups that count me as a member, we do. Apparently some other people do too - David Wheeler claims that there are 30 million lines (more than $1 billion worth) in Red Hat Linux alone.

Objection: Our technology platforms are too balkanized to enable us to collaborate on common implementations.
Maybe Microsoft isn't going to start collaborating on Firefox, but who cares? If you follow the trends that W3Schools sets forth, IE's days are numbered anyway. Apple already uses an open-source browser engine.

Objection: Ditto for our political agendas.
This, I think, is the most telling objection. People who want to produce a good product for their customers will use open-source software and collaborate on its implementation, because that is quickly becoming the industry's best practice for producing high-quality software. People who instead have a strong political agenda, unrelated to the quality of their products, will develop standards bodies and waste their time re-implementing tons of code which is available elsewhere for free.

For an example of technology politicization, SQL is a "standardized" language, whereas PHP, Python, Perl, and Ruby are each open-source with a single implementation. Have you tried to write a whole program in SQL lately? Or even make a generated SQL statement run on more than one database at a time?

There are still some areas where standardization is important - the web comes immediately to mind - but that is only because it is a platform still nominally controlled by entrenched proprietary interests. Imagine, for example, Microsoft were to give up IE tomorrow, and suddenly declare that they were simply packaging Firefox with Vista. What would the point of the W3C be at that point? To broker discussions between Firefox - with 99% market share - and Safari and Opera? It's unlikely. Safari, being open-source itself, can crib freely from Firefox's code where necessary, and Opera is already an also-ran, copying from behavior of the major browsers more than implementing an abstract standard.

While not quite as bad as SQL (it is possible to make pages which render in both Firefox and IE, at least), anyone who has done browser-portability work will tell you that standards aren't all they're cracked up to be in this arena either. On a daily basis I wish that Firefox were the only implementation I had to contend with.

There are more examples of this trend. There is a PNG standard but even Microsoft just uses libpng. Mozilla maintains what I think is the most exhaustive description of the failure of the C++ standardization process - I think it would be hard to argue that things wouldn't be better if the "standard" were in the hands of the GCC team. Jython and JRuby both elegantly prove that you can have implementations that bridge language gaps without a formal standard.

It's not that open source can replace "open" standards and the standardization process. Open source has replaced standardization. We've just been waiting for the world to catch on.

(Unfortunately Brief) Austin Retrospective

The week before last I took a trip to Austin, Texas. This was unfortunately in lieu of both PyCon 2006 and ETech 2006 since we couldn't get the whole Divmod team to either of those events. Sorry, disappointed conference-goers! We'll make it next year for sure.

It was a half-vacation half-bizdev trip. It was really good to get a break from the day-to-day minutia of everything that needs to be done on Divmod's infrastructure, and take a look at the view from a thousand feet up, and think more about how awesome our team and technology are. Luckily we are pretty awesome so it was a good boost to my energy level to focus on that for a while.

The ostensible purpose for this trip was to cement some kind of formal working relationship between Divmod and Roxor Games. On that front I think things went spectacularly. We had a series of meetings that lasted all week long, and were, I think, a credit to the very concept of a "meeting". I had hoped that this post would be longer, but looking back over the week, it seems that most of the details of those meetings involved deals that aren't final yet and are technically secret. I'm kind of out of practice at keeping secrets, having been on the open-source circuit for so long, but even I am pretty clear that putting things on a syndicated blog that gets tens of thousands of hits per post is not exactly in the spirit of an NDA.

If you know me, or you know J---- (the malign overlord of Roxor), you can probably guess at least part of what's going on. Don't spoil it for everyone, please! If you, for example, posted "Oh snap are you guys making a [REDACTED] for the [REDACTED] market???" in the comments here, I think I might be violating confidentiality agreements by proxy. If you're not one of the folks In The Know, I will give you one hint: Divmod's technology has certain applications outside of email.

To give you some of the flavor of the week, though, here is a cell-phone snapshot of the one formal presentation I gave while I was out there. For a "projector", I used a prototype of an racing arcade machine Roxor will be releasing soon.
Divmod Racing Machine


It was also surreal, not to mention a ton of fun, to get a whirlwind tour of the gaming industry rumor mill, not having been involved for a while myself. At various points throughout the week I found myself, a visitor from two thousand miles away, relaying messages between folks who are within a stone's throw of each other. Thank you to everyone who had a great story for me.

Most of all it was fantastic to get to visit a bunch of old friends. Shout outs to my homies: thanks for making time for me! Thank you Allen for driving me around town for a week. Thanks also to Jason, John, Al, Travis, Brian, Jason[2], Matt, Melanie, Seneca, Dave, Damion, and Sean. To those of you who I missed - especially Andy, Skiv, Adam, and Spencer, and of course anyone who I forgot to list - sorry about that. I'll be down again sometime soon, drop me a line at glyph@divmod.com and I'll make sure to meet up with you next time.

I know you're all expecting an update...

One is forthcoming, but this has been a crazy week for me. There was a lot to do upon my return from Austin, and I have been sick for the last 2 days.  I do have quite a bit of backlogged posting to do here; I should have at least one up over the weekend.

PyCon's Anti-Prom

I didn't get to go to PyCon this year. I'm just now back from Austin, where I was discussing secret plans. More on that soon.

However, before I forget, I'd just like to thank Ted Leung for specifically mentioning Divmod's absence in his PyCon wrap-up. It's good to be missed. We missed interacting with the PyCon crowd this year too - and of course, specifically the Chandler team ;-).

(PS, it's "Divmod", not "DivMod" - although Ted is hardly the only person I've seen make this mistake. I have a feeling it's fated to be a common one, like the way some people say "PC or MAC" as if "MAC" were an acronym for Macintosh Apple Computer or something.)