Three ways for Ubuntu to help developers

Developers are a crucial part of any successful software platform. In the same way that an operating system is “just” a means for people to use applications, a platform is “just” a means for developers to create applications and make them available to people.

There are three primary ways in which Ubuntu can help developers do their work. They are all related, but distinct, and so we should consider them individually:

1. Developing for Ubuntu

Today, Ubuntu bundles thousands of free software applications, for both clients and servers, most of which are packaged by Debian.

3. Distributing through Ubuntu

Like other modern operating systems, Ubuntu isn’t just a platform where applications run, but also a system for finding and installing applications. Starting with APT, which originated in Debian, we’ve added Software Center, the ISV partner repository, and various other capabilities in this area. They all help to connect developers with users, facilitating distribution of software to users, and feedback to developers.

So, where should we focus?

Some developers might be interested in all three of these, while others might only care about one or two.

However, most of the developer improvements we could make in Ubuntu would only address one of these areas.

For this reason, I think it’s important that we consider the question of the relative importance of these three developer scenarios. Given that we want Ubuntu to flourish as a platform, how would we prioritize them?

I have my own ideas, which I’ll write about in subsequent posts, but here’s your chance to tell me what you think. :-)

If I’d have to chose only of the three, I’d choose “Developing on Ubuntu”. This is especially important in capturing mind share and consequently market share. As a corollary, we would also see improvement in “Developing for Ubuntu”: devs always develop (tools) for the platform they use for development. Generally speaking, devs also serve as opinion formers. Focusing on 2 I think is where the most ROI is.

Well said. Certainly all three aspects are important, but improving “Developing on Ubuntu” really strikes at the core. NeXT had one of the best development environments, which Apple inherited, but OS X did not gain popularity as a “developer’s OS” until the past 5 years. Ubuntu is gaining and can continue to gain popularity as a development platform by exploiting the portability of its toolset and freedom that Windows and OS X lack. Ubuntu also has the potential to provide the latest stable JDK, Android SDK, Python or jquery; and the very latest development tools can make all the difference when choosing a platform for development.

To prioritize the three aspects, the next most important is “Developing for Ubuntu”. The Ubuntu changes like UNE and Unity have been a moving target for projects like Chromium and Shotwell. Additionally, proprietary Linux software like Maya is targeted at RHEL, while Mathematica 8 targets the no-longer-supported Ubuntu 7.10. This is a smaller issue because we must break APIs to make progress, and efforts like the Portland Project are making progress at stabilizing core desktop APIs.

One thing I forgot to add that I think make a lot of difference: the ability to have multiple versions of the same software installed at the same time. I know it’s not trivial but version conflicts for dependencies are a PITA for developers.

Nice to know you have ideas. I think all of them are linked but we need to focus one, don’t we? So here’s my opinion: if we focus (2) we easy all the other layers (1 and 3) allowing the changes/improvements to be done quicker by developers and these changes naturally being pushed faster to users.

I’d be interested in hearing a bit more detail on this statement in your post:

“However, most of the developer improvements we could make in Ubuntu would only address one of these areas.”

Are you saying that Ubuntu as a project only has the resources to improve on one particular area, or rather than committing to improve one particular area logically precludes improving the other two? And in either case, why?

I’m sorry this wasn’t very clear (someone else asked the same question above).

I meant only that they are different concerns, which require different actions. As in any project, we need to make decisions about what is most important, and focus our limited time and energy there.

This is also a question about what Ubuntu should do best, what its essential functions are. Software which tries to do everything is generally mediocre at best. If we want to strive for excellence, we need to choose.

Ubuntu was founded on this principle, though it was never explicitly stated (and perhaps it should have been). We chose a fairly narrow section of functionality, audience and technology, and made something which filled that need well.

First, thank you and everyone at Canonical for making Linux more accessible with Ubuntu. I switched to an Ubuntu development environment several years ago, and I have enjoyed it most of the time.

However, despite Ubuntu’s continuous improvements, I still encounter major, intensely frustrating problems frequently enough that I cannot yet switch all of my machines to Ubuntu or recommend it unequivocally to all of my friends. (I still run Mac OS X at home so things like sound output Just Work.)

I strongly encourage you to focus on *Scenario 2* in your list above and attempt to make Ubuntu the ideal OS environment for developers on both home and work machines. Here are the sorts of improvements I (and others, I imagine) would find desirable:

– No more blank screens on boot, ever. Google “ubuntu blank screen” to see how frequently this problem crops up. There have been far too many times over the years on many different machines with many different versions of Ubuntu when I would reboot to an unexpected blank screen, usually without even the option to get to a fail-safe terminal via Ctrl-Alt-F1. This has variously happened on fresh installs, on installations that had long been running fine, on old machines, and on new machines. And the problem still exists: very recently, I tried to install 10.04 on new hardware and got yet another blank screen after a seemingly-successful installation; I was only able to resolve that problem by installing 10.10 instead. A blank screen on boot is among the most discouraging problems to face, as diagnosis of the problem with nary an error message is challenging even for fairly technical people, so I would really appreciate it if Ubuntu banned blank screens on boot forever.

– Make sound work, always. I have wasted a great deal of time trying to make Pulse Audio work at all on various machines, and it still silently fails (ha ha) inexplicably. Whether I want to listen to music while I work or play a Google Voice message or watch a YouTube clip or make a Skype call, I am never confident that Ubuntu’s sound will work, and it seems like it usually doesn’t.

– Make Ubuntu awesome on virtual machines. I would really like a one-click VirtualBox-style Ubuntu VM that I could easily install and reset on my Mac as a local development environment; setting up Ubuntu in VirtualBox manually is currently cumbersome and counter-intuitive. I applaud the efforts to make Ubuntu work well on EC2.

– Make OpenOffice reliable on simple documents. I once tried to edit a resume in OpenOffice, and it would *lose* my bold formatting when I saved and closed the document and reopened it. I don’t mind if OpenOffice can’t handle extremely complex formats, but if I make a header bold, I want it to *stay* bold when I look away for a second. I know this isn’t Canonical’s fault, but people need a good way to edit documents on Ubuntu, and nothing seems to be “there” yet.

– Get Adobe to release Photoshop and Illustrator for Ubuntu. I know this will be a controversial suggestion, and I don’t personally need it as long as I also run Mac OS X. However, I and many others need access to these programs to produce professional-quality illustrations; the open equivalents simply aren’t suitable replacements.

There are many other issues such as DVD playback, photo management, and the like that also keep one of my feet in Mac-land, but these seem like they would be surmountable if the major issues above could be fixed.

Thanks for soliciting feedback, and thanks again for making Ubuntu as great as it already is!

Here are a few more suggestions on how to make Ubuntu an ideal development environment:

1. Please make sure you can fullscreen Emacs in the default window manager with the F11 key & make sure multiple desktops are on by default. Development on a laptop is much easier this way.

2. Please be much more aggressive about packaging new versions of libraries. For the longest time, I had to use django from debian testing b/c django in lucid was stuck back in the stone age. I realize the importance of stability, but it would be nice to have a way to install at least the upstream stable version of libs (perhaps by adding the major version to the package name).

3. Since so much development is happening on the web, please think hard about best practices (eg nginx vs whatever as a frontend, apache in worker vs proceess mode) as the default. Make it super-easy to install ssl certificates, activate gzip compression, stuff like that. Perhaps an apache2-awesome mode package that does this would help.

And the huge one:

4. Please make .deb packaging less of a colossal pain. It took me forever to figure out how to script making .debs so I could do it from make, and I’m pretty sure I’m not doing it the right way. (This could just be failure on my part but assume for the sake of argument that it isn’t.) This sucks because .deb is an INCREDIBLY AWESOME way to deploy software locally, since it manages deps for you. It would be great to have a worked example of writing a (self-contained, depends on stuff only in ubuntu-main) makefile that builds a deb and puts it in a ppa. If that file is really short, even better.

5. On a related note, it would be great if it were easier to tell unattended-updates to Just Work. (Eg set one bit in the conffile and it will keep your system updated without the need to set ten different switches and seperately tell apt-conf to assume yes to most questions etc etc. This is critical for building appliances, virtual or physical (think tivo).) And on that note, it would be awesome if it were easy to build a mirror of ubuntu containing just the pkgs needed to build a particular system with one command. (E.g. given a installed instance of a system, build a mirror.)

I think the last post (that talks about updated library versions) is indicative of some of the tensions between the different cases you describe. I think that Ubuntu products, as delivered, need to be primarily for users to use. To that end, I think that focus on improving what is delivered as part of Ubuntu products should be the first priority.

I understand that developers who are developing on Ubuntu will generally want the latest and greatest tools to build on. Where it’s reasonable, we should provide those, but not always as part of the main product (-backports is often quite good for this as are specialist PPAs run by people who understand the packages they are providing).

Canonical needs to demonstrate that Ubuntu is a great platform to develop for.
Not just for open source applications but also proprietary ones.

Bigger and heterogeneous is the ecosystem around GNU/Linux and Ubuntu, bigger are the benefits for all of us.
Ubuntu it’s already a great Operating System but it needs to improve as a platform to develop for.

So we need a better and simple platform to develop for. See iphone or android store. It grow because develop for is very very simple and well documented (and also very well publicized but this is another story).