views:

252

answers:

5

I understand the concept of open source, but I just realized now that I understand it from only one view: when I open source my own code. I don't really understand what benefit I'm getting from receiving the same thing.

As a regular developer (like the majority of us here), I did not spend the past 4 years of my life working on "developing" the android. So even though I'm a developer, I'm at the end of the developers chain when it comes to the Android (like most of us). I'm really more of an end user. So my interest in Android isn't really to dedicate all my time to it or work on improving its kernel or anything overly ambitious.

So with that clear, as a developer considering developing for the Android, how does it really benefit me that it's open source? What's the added benefit that I'm missing? Can other developers share some concrete ways that its open source status actually affects us as developers.

Basically I'm trying to understand how we, at this developer level, can make sense of the fact that it's open source, or is its open source status just hype for us at our end developer level.

Thanks

+8  A: 

In theory, open source means you're less likely to have your software company instantly destroyed by the arbitrary and capricious owners of a closed platform. Of course I am not referring to the recent decision by a company named after fruit to ban applications based on third-party platforms like Flash and Mono, because the fruit company is so awesome as to be beyond criticism.

In reality, Google could screw you over too, but they do seem like nicer people.

MusiGenesis
Can you elaborate how Google can screw us? That's what I'm trying to understand, is it not really that much different from closed source.
danke
Google has already done it once, by releasing Android 2.1 only to selected partner, months before anybody else had access. This shows they are willing to give competitive advantage to particular company at the behest of their developer ecosystem. They are commercial company, so their primary goal is to make money, so I can't blame them for doing so; however, when you make choice to adopt that platform, do not be mislead by the "open source" label - it is tightly controlled by Google.
Franci Penov
Why do trees grow tall and kill off the shorter trees? Because they can.
MusiGenesis
I'm not sure I would characterize the release of 2.1 with the n1 as a manufactured "competitive advantage". The nexus ones sales dragged behind the Droid's significantly, probably largely because it was barely advertised. Since Google ran ads for chrome it seems like they understand the affect advertisement has on adoption, so I feel like it wasn't a cash grab. I don't know of any instances in which Android tried to kneecap developers.
jqpubliq
@jqpubliq: if the analogy is to a foot race, then Google gives some of the runners a head start. Apple, by contrast, shoots some of the runners in the head with the starting pistol. I'll go with Google.
MusiGenesis
:-) And just in time for this discussion: http://www.visionmobile.com/blog/2010/04/is-android-evil/
Franci Penov
+5  A: 

For me, Android being open source hasn't been a make or break issue. Coding at a high level it hasn't impacted me a lot, but for some of the nitty gritty it can be nice. Because it's open source it's easier to find conversations on stuff like how the GC is implemented in different releases or check out how media is handled when you need a solution that isn't already available. Basically there is a little more low level info floating around and the ability to check things out yourself when you bump into weird little API bugs or quirks.

In a similar vein to the above, sometimes it's nice to know be able to look at the source code to know how something is done, not because there's a bug in it, but simply because you don't know how to do it. It's also convenient because you can see the detail of the implementation for some of the poorly documented APIs. For example, the styles and themes in Android are tricky to figure out how to use because there isn't a comprehensive list of the names of elements that can be styled. However, by looking at the source you can find those elements, such as what name you have to use to change the default background of menus, and then implement your own theme.

jqpubliq
+1  A: 

Sorry for the long reply, but as this is a non-trivial and sometimes polemic topic I thought I'd share my views in more detail. If you do disagree with something, do speak up! :)

I see several advantages. They might not be particularly relevant to you, but think about it this way: there's no downside. If you want you can treat it as any other closed source platform and be on your way.

Here's what I think are the big advantages of (any) open-source project

  1. If you hit a particularly nasty problem you can look at and debug the OSS' code.
  2. If you find the cause of a bug is in the OSS, you can fix it yourself.
  3. You can develop a business around that OSS without being (exclusively) tied to other's goals and priorities.
  4. If you disagree with the way the OSS is going, or if others suddenly stop working on it, you can work on it as you wish.
  5. You can do whatever you want with it, even if it's something it was not part of the original plan.

Now for a bit more detail.

Most people would never do 1), but trust me - it can be handy. For every day uses most bugs and features are probably (relatively well) ironed out, but more exotic and less used parts of the system are probably not. If you venture into those you are almost always guaranteed to hit poorly or undocumented APIs, and with closed source software you'd be pretty much stuck. With OSS you just open the file and look at what's there. (You probably don't want to use undocumented APIs anyway, but the point is that if you really want or need to it's much easier to do so).

And what happens if you're developing a program and find a bug in the closed-source SDK or platform you're using? You're pretty much stuck, and have to wait until the other company fixes it. Not with OSS - if it's important or blocking, it's probably easier to just fix it yourself.

This in turn means that your business is not tied to other company's goals, that if it becomes needed you can fork the project and be on your way, which in turns means that you can do pretty much anything you want with it - whether doing it is within the scope of the original program or not.

Compare, for example, Windows Mobile with Android. (And let's not start a flamewar here - it's just an example)

Windows Mobile 7 will not be backwards compatible with previous versions, and OEMs will not be able to customize it at will. Porting it to new architectures/devices is not possible without at the very least Microsoft's approval (since they're the ones who fully own the code), and it's meant to run only on mobile phones. If you're developing a new device you're subject to Microsoft's rules and fees. If they decide to stop selling a given version, you either have to use a newer one or stop supporting the software entirely.

With Android if you disagree with a decision (like lack of backwards compatibility) you are free to either implement it yourself, or continue working on the previous version yourself. You can port it to new architectures/devices without asking for anyone's approval, and if the software is really free (and not only "you can look at the code but have to pay us to use it") there are no fees to use it as you see fit.

There are, of course, downsides. With closed-source software you can completely control the experience of users, whereas with open-source software you might fall into a trap where each device has a different experience. If many people have conflicting interests you might end up with many similar-but-a-bit-different OSS projects, duplicating effort and wasting time. The OSS license has to be chosen carefully to ensure that it's the most appropriate. If there are many interested parties you need someone who "gets" OSS to drive the project. I personally think that in practice these end up not being problems.

And what are the advantages to end users (ie the average Joe that buys an Android phone or a Linux netbook)? The first one is that it's possible to have cheaper devices, because manufacturers don't have to pay for (as many) licenses. The second is that it's easier to make new devices faster, as most of the software already exists and it only needs to be ported. The third is that it's more likely (but not guaranteed) for them to see their current device supported by future versions of the software.

In short, I can sum the advantages I see in OSS in one sentence: OSS has many advantages compared to CSS, but no real disadvantages - at worse you can use it like you would CSS, and at best you can reap the advantages.

anog
+1  A: 

You probably know this, but I think it bears stating because the expression "developing for the Android" can be taken two ways.

Android the platform is open source, so if you wanted to customize that in some way your code would come under the open source license.

However you are perfectly at liberty to develop closed source applications for the Android platform. Your own apps can be under any license you want.

Jim Blackler
A: 

I appreciate all the points made so far. No doubt there is room for discussion on the merits of CSS or OSS. But as an employee of a company just beginning our own android project I'll give you what we considered to be possible benefits: 1. It's Free. While the price that a certain company charges developers may be considered minimal it still must be accounted for. 2. Apps aren't controlled from the top down. You develop it, it's yours. You can promote it and sell it as you see fit. It's not based on some approval process you must comply with. This can greatly expidite your time to market.

Bub