Various software licenses in a single line

Back in 2003, I posted this handy cheat-sheet for various software and source code licenses. Several recent events have prompted me to repost this, as a Public Service to the Internet. Apologies in advance for the painfully old meme, but good ideas transcend time.

HOW ARE YOU GENTLEMEN. Here are a number of popular software and source-code licenses, expressed as one-liners in an easy-to-understand format:

  • GNU General Public License (GPL):
    ALL YOUR SOURCE ARE BELONG TO EVERYONE
  • GNU Lesser General Public License (LGPL):
    ALL OUR SOURCE ARE BELONG TO EVERYONE
  • Netscape Public License:
    ALL OUR SOURCE ARE BELONG TO US
  • BSD-Family licenses (New BSD, Apache 1.0, Apache 2.0):
    ALL OUR SOURCE ARE BELONG TO YOU
  • SCO software license:
    ALL YOUR SOURCE ARE BELONG TO US
  • Typical monopoly-era Microsoft End User Licensing Agreement:
    YOU HAVE NO CHANCE TO DECIDE MAKE YOUR PAYMENT

Sometimes life proves your point... or does it?

A few weeks ago, I made the point that Apple treats the iPhone as a gadgets-style platform. Then last week, lots of people reported the news that Apple had "banned" an application because it reproduced functionality in iTunes. Cries of anti-competitiveness began almost immediately. Based on my earlier post, you might suppose that I'd agree with that -- but I don't.

I don't think this is anti-competitive per se. They're certainly no more anti-competitive than anyone else, right now. The App Store Ts&Cs make it perfectly clear that Apple views the iPhone as their platform, and that developers are welcome only insofar as they push the platform forward. This is simply a concrete illustration of Apple's determination to own the direction of their platform, and not implicitly cede it to third-party developers. They're not necessarily wrong in that.

Of course, it's an illustration that has come as a surprise to developers. But while it's unwelcome, I don't really think it's anti-competitive. After all, there are plenty of opportunities to build and market apps for other platforms and devices. It may be much harder to actually deploy such an app for, say, Symbian and acquire the same reach as you can with iPhone, but doesn't that say more about the state of the industry than about Apple?

Who's more "anti-competitive" -- Apple, or the status quo?

Even with this issue, Apple's platform is still a step forward for the industry. Of course, it would be nice to take a few more strides than just the one, which is why I'm still pleased as punch to be working on Android. But I think flaming Apple over this is the wrong response; you're not going to change their minds, because I guarantee you that they expected to get flamed for this. They're smart folks, and they knew very well that this policy would cause ripples the first time it came to a head.

That said, in this specific instance, it seems like their conclusion is kind of specious; does that app really duplicate iTunes functionality, and even if it kinda does, does it matter? So I'm positive that their developer relations and PR teams are (re)considering this even now, and it wouldn't surprise me at all to see them recant and perform one of their homey mea culpa reversals as only Steve Jobs can perform. It would defuse the criticism in this case with little actual risk to the platform, while still making the point they want to make: "Welcome to our platform. Enjoy the ride, but remember that we're the ones driving."

Last year, it seemed like deploying a successful mobile app was as much luck as anything else. This year, at least you can easily deploy one, if only on someone else's terms. That's definitely forward progress -- and momentum is building. Just think where we'll be next year.

There are gadgets, and then there are Gadgets...

A while back one of my colleagues -- Charles Wiles -- asked me a very interesting question:

"What is an example of an application you build with the Android APIs that you couldn't build with browser Ajax?"
This is a deceptively simple question. There are easy answers to it, but it turns out that those lack a certain... je ne sais quoi. The easy answers just aren't satisfying, and I eventually realized that there's a deeper question that people are really asking, when they ask about Android "vs." some other platform, like J2ME or the iPhone or Symbian.

So I spent some time thinking about it. One problem is that there's a lot of grey area here. Many applications could be done using either technique, or on several of the other platforms out there, and still be great user experiences. In other words, it's not really about features, and it's not really about capabilities. It's not about having GPS where someone else doesn't, since the other guy will add it in his next release along with a feature you don't have.

I needed a deeper, better answer. I eventually realized that what developers are really getting at when they ask questions like this is:
"What is the difference is between all these damned platforms, and why I should care?"

Every developer has a different career, skill background, and set of interests. Everyone also tries to understand new things by applying knowledge they already have. So, developers who understand J2ME ask about Android vs. J2ME; developers who understand Macs or iPhone come from that direction; and so on. But they're really asking the same thing: how should I be thinking about Android?

Let's take the iPhone, for instance. With the iPhone Apple has a very solid, very successful platform -- no doubt about it. However, much has been made about the restrictions on applications, such as no background processing, no interpreted language runtimes, and so on. Opinions vary as to whether this is good, bad, user-friendly, developer-unfriendly, or what.

But that kind of scrutiny is like looking through a microscope: you can't see the big picture. What Apple has with the iPhone really just boils down (in concept, not in the details) to a gadgets platform, like OpenSocial, iGoogle, or Facebook.

Apple owns their platform and sees themselves as responsible for the user experience, period. They restrict what applications can do and what they can access accordingly, so as to maintain the quality of that user experience according to their standards. They acknowledge the benefit that third-party developers can bring and will let you build apps to plug in to their user experience, but make no mistake: this is a private party at Apple's house. They can be as picky as they want about who they let in, and they can ask you to leave at any time. But once you get in, as long as you behave yourself Apple wants you to have a good time.

Now, this isn't criticism, just an observation. As Google, Facebook, and the various sites that have deployed OpenSocial demonstrate, this is a perfectly legitimate platform model. Like those other services, Apple is providing the platform and a very clear, specific execution environment. Developers are expected to plug into that cleanly and respect the borders that Apple has laid out.

The benefit to developers is that they get to ride the coattails of iPhone's success. But the potential downsides are that you just can't break out of that sandbox. For instance, consider Facebook. Facebook has a really nice iPhone application, and I've even heard it said that it could "almost" physically replace the iPhone Contact book.

Well, why doesn't it? The answer is that Apple doesn't want it to, because that Contacts user experience is a key part of their platform. It would be like Facebook itself letting a third-party developer build an app to totally reskin the site and insert its own branding -- it's just not going to happen.

However, that kind of thing is exactly what Android aims to enable. If an end user buys a phone that comes with the standard Google look-&-feel and application suite on it, we see no reason why that user shouldn't be able to choose to replace it with Facebook. Android is intentionally designed to let third parties such as Facebook build an application that replaces the Contacts book, Home screen, and Dialer, or nearly anything else. It will quite literally be possible to completely reskin an Android device into a Facebook phone. (What would that be -- an fPhone?)

You might even say that Android and iPhone are sort of inverses of each other. iPhone is a Gadgets-style platform where the user experience is largely fixed and an execution context is carved out for each third-party application. Android provides a framework for managing the execution contexts of third-party applications, which are permitted (and expected) to augment the user experience in innovative ways.

Neither approach is inherently "better", and when it comes down to the daily business of writing code and building UIs, the experience probably isn't that different. But in terms of the big picture, that is the satisfying meaty answer that I've been looking for.

At least, for "Android vs. iPhone." There are quite a few other platforms out there, though, and each one has a slightly different answer. (Perhaps the subjects of future posts...) But now that I have the right angle to view this question from, it makes it a lot easier to talk about. At least with geeks -- I don't know that my family appreciated it that much last week, when I was home on vacation.

So it goes. ;)

My Obligatory Foo Post

(...but one I am excited to write.)

This weekend I attended Foo Camp. It was a crazy, exhausting, exhilarating, fascinating experience. I wasn't quite sure what to make of everything beforehand, but now I can say that Foo was quite possibly the best event I've ever attended. The thing is, I'm not sure I could say exactly how or why.

Foo is a mostly technical event. I've been to some really rotten (though well-intentioned) events that tried to wed technical and non-technical content. However, they involved putting technology and humanities people in the same room and expecting magic to happen. In contrast, through what I can only assume was painstaking care Sara Winge and the other Foo organizers put together a remarkable guest list, and the format (or perhaps, lack thereof) is structured to make with the mingling.

But I shouldn't be trying to do an expository description. You can't accurately describe Foo that way. The only way I can think of to really capture Foo is to just describe some of the things I saw and did there.

I saw and met a lot of people -- many of whom I never thought I'd have the opportunity to meet. For instance, I played Werewolf with Jimmy Wales, among others. At one point, Jimmy exclaimed "No no -- it's me who smells like pickles!" At least, I think it was Jimmy -- it's hard to remember clearly when you play Werewolf until 6am. (And don't ask -- I can't remember how we got on the topic of pickles anyway.) The whole time, I just couldn't figure out how I got meet Jimmy Wales, let alone play Werewolf with him, let alone hear him say a thing like that.

At least as interesting were the folks I met whose names I didn't recognize (but probably should have, and am pleased I do now). I was going to list a few, but decided that would be name-dropping, and there's no way I could even remember everyone I met anyway. Instead I'll say that a big part of Foo for me was being in the presence of people who seemed larger than life, and realizing that they are all just people -- albeit more talented and more interesting people than me. I know that probably sounds gratuitous and cliche, but it's the truth: there's something profound in the simultaneous revelations that celebrities are just people, but many of them really do deserve to be celebrities.

The sessions were great too. I went to one session where the first half was about electric cars, and the second half was about baking killer bread. And both were really great conversations! Where else can you find a session like that followed by one on parallel programming trends, and then co-lead one yourself on Android?

I actually co-lead two sessions, and tried for a third on designing a card game, but the aforementioned 6am Werewolf and my co-lead's unexpected cold spelled doom for that one. I'm bummed about that, because the card game session was to my mind the one that would have counted. I do Android stuff all the time so answering a few questions with a colleague for an hour is no big deal. It did go well (actually, very well -- the questions were quite good, and we had pretty good turnout at around 30 or so people) but I can't claim it was very original or insightful, as content goes.

What I still am not quite sure about is how I got invited. I'm curious, but I guess I don't need to know. That's not really the point of Foo -- you're just supposed to go, and be a part of what's going on.

And that, I now realize, is what Foo is all about: it's about people and ideas, not technology. Tim actually says as much when he describes the event, but sometimes it's hard to parse the forest for the trees.

Who knows if I'll get invited back next year (I doubt I was all that interesting to the other folks there) but it was definitely a pleasure and a privilege to go. I owe a huge thank-you to Tim O'Reilly and his awesome staff for a wonderful event.

I think I've learned a Genuine Life Lesson

I used to be quite the armchair analyst. Well, probably no more so than any other software engineer, but as a group we do love to speculate. There's just so much drama out there, with the jockeying and jostling of companies and technologies.

But for the most part we are also naturally skeptical, so I never got that carried away. Indeed, I was quite proud of how much I didn't get carried away.

At least, before I started working on a high-profile project that routinely gets press coverage. If I took things with a grain of salt before, I take them with 5-pound bag, now.

It's odd though: I haven't learned anything I didn't already know (remember that reporters always have angles, and so on), but now I don't just know it, I know it all the way down to my marrow.

I went through phases, too. At first I was indignant ("How dare they miscontrue us so grotesquely?") or amazed ("Well I'm glad they like us, but that's a bit over the top.") On my way to where I am now (mostly indifferent with a mix of amused and irritated), I passed through a few other minor phases, of which my favorite was a sort of cognitive vertigo: "I know it's not true, but... everybody's saying it. Maybe... maybe I'm wrong and I don't know it?"

We've had everything from cleverness to malice to incompetence attributed to us. There have been reports of Android devices launching ridiculously early (February? seriously?), as well as implausibly late (2009?!). People "familiar with the matter" have been quoted saying things that sound like they came from a different universe. Based on just the press, you could be excused for thinking that.... well, that there's drama.

What this has taught me is that there's just no point in judging anyone -- especially companies -- by anything other than their actions. But what I've learned is to include in that what they say: if Nokia/Symbian says they want to open up, then I assume that that's their plan, until they do something else that says otherwise. If Apple says they don't have background processes because they want to protect the user experience, then I don't automatically assume that's just cover for wanting to hamstring third-party developers.

I no longer scrutinize companies for drama, until they actually do something dramatic. Conspiracy theories and armchair punditry are fun in their way, but for me they've become an indulgence I try to avoid.

Oops

Heh, looks like my new Blogger template is not without bugs -- on the comments page in this case. :) I'll have to fix that ASAP.

Blogging is hard.

I've had blogs before -- the kind where I imagined people wanted to read about me doing my laundry, or the cat's latest biological nonconformity. When I started this one, I decided I'd try to keep the value a bit higher, and only post things that I'd thought through, and proofread a couple times. So far I've done that.

But damn, it turns out blogging is harder than I thought. I just re-read a couple of my most recent posts, and while I'm not unhappy with them, I am not really satisfied with them, either.

I think they're still a bit too long and rambling. The message is in there, but you have to work to find it. This is after what I thought of as an aggressive editing cycle. I think I need to amp it up a notch, and go from aggressive to brutal.