Last night Google announced Google App Engine. Since then I’ve been pretty obsessed with it. (If you are interested in trying it out, you should sign up and put in a request — they seem to be sending out invites periodically).
Since last night I’ve been reading about it, and some of the commentary around it. I haven’t actually tried to run anything on it yet. But here’s my first impressions:
It’s not as peculiar system as some people have suggested. It runs CGI-ish scripts, and it is easy to turn that into WSGI. Processes can be reused, but they are short lived and single-threaded. You can’t have any background processes. It’s a lot like the PHP process model. An SDK is provided that allows you to run stuff locally. The SDK is open source (Apache licensed), so at least a minimal environment is available with no proprietary ties, and it provides a model for reimplementing proprietary parts of the stack.
There’s no database, but there is Google BigTable stuff, with a database-like API. It accepts queries that look like SQL, and they give a Django-like ORM. It’s close enough to be familiar, but it’s not exactly a database. Like the ZODB, you have to add indexes for any queries you want to run outside of the most obvious queries. It might be more accurate to look at BigTable as ZODB-like than RDBMS-like. But I don’t know; it’s a big topic and I’ve only read that part of the docs lightly. This is probably the biggest proprietary tie that an application written for appengine will have. But I think that making this API work over the ZODB would be feasible. You won’t get the same scaling properties of BigTable, but the application would still be viable. There’s also some APIs for email, authentication, and doing URL requests. Only authentication really seems concerning from the perspective of tie-in. Google, unfortunately, has not been particularly progressive with respects to OpenID. But people have already used OpenID with this, so it’s not a hard constraint. Given Google’s involvement in Open Social stuff, I also imagine that their stance on authentication will improve.
That’s just a short description, but I post it here because I’ve been thinking about what if anything this means for TOPP development.
Generally, I think this could be a very big thing for Python web development. This offers a development environment that is on par with PHP (which I think has a very good and accessible development environment, IMHO the most significant reason for its success). Well, better than PHP really, as you get most of the deployment advantages, but they’ve structured the system in a way to make good development practices easy (private staging deployments, you can update and revert versions of an application, and probably other stuff I haven’t yet noticed).
This relates to us because of what this could do to the general ecosystem for open source web applications. Right now deployment is hard. Hard enough to seriously stunt the success of open source web application projects. Even the most successful applications — for example, Trac and MediaWiki — seem to be a flash of activity until they are superseded by easier-to-manage hosted services. Google Code’s issue tracker is a far cry from Trac, and not extensible, but it’s so much easier to manage that I have a hard time recommending going through the trouble of setting up Trac (and dealing with spam and other problems) when that time could be better spent actually writing code. Supporting deployment on systems also is a lot of overhead for open source developers, and the overhead has very little return. Supporting more deployment options doesn’t actually improve a product.
So as a result the emphasis has been on hosted services, and open source development effort has been focused more on tools for building those services than on the services themselves. In some ways this seems reasonable: with public, free, hosted services (which is a lot of services these days) why do you need more than one implementation? But of course that’s a simplification, and there are many reasons you might want to modify a web application at the code level. And while mashups offer some extensibility without code sharing, and with closed/hosted services, they can be quite limited. Unless you write your own applications, which is too difficult for many people to do reliably because deployment is hard, expensive, and hard to scale in response to the surge in traffic a successful mashup can get (a surge which might not turn into any means of economic stability, as the surges themselves are unstable).
Google App Engine could change this. This is a hosted platform that appears that it will, when it gets out of beta, offer basically free hosting to small web applications. (The quota limits, which they say will remain for the free service after it gets out of beta, are quite generous.) So, for instance, if the Trac developers make a port to this environment (which seems quite possible) then installing Trac, with whatever plugins you want, and any local modifications you care to make, suddenly seems very feasible. Even feasible for people who could only marginally be classified as “developers” — a class of people who have almost entirely gone to PHP up until now.
Internally we’ve always struggled with how functionally open source our products can be. That is, while people are allowed to use the stuff we write (via licensing), that does not necessarily make the stuff we write compelling or useful. Deploying our entire stack is somewhat challenging, and even putting aside the technical points of that deployment, there’s the concern about whether it is a useful basis for someone outside of our team to make a site. This might be resolvable, but when open source web applications have such a limited potential for success it makes it hard to justify resolving problems. This could substantially increase the motivation to create reusable applications.