Most people can only write software if they do it for a living

Looking back in time

Jason just pointed out in this email that the fact that we had a window of opportunity during the netbook boom that was lost was a failure of GNOME as a project. I'd like to point out that first of all, I think that if an ISV and an OEM failed to use GNOME and engage with our community to affect change so that they could build their own product, it's their failure, not ours. Nonetheless he has a point.

It's worth noting that people buying netbooks just wanted more portable and cheaper version of the traditional Windows desktop, and that's why demand for netbooks shrunken after a while. It failed to match the expectation of the user, and no matter how good and perfect GNOME was back then, we would have failed to match that expectation.

However we can learn a few things about what's been happening since then.

I think that the reason we didn't make it during the netbook boom has more to do with developer experience. It had nothing to do on how usable our desktop is, we were usable enough back then. If we want to reach for adoption, we need to focus on other aspects.

I think we succeeded long ago in the goal of making Unix usable enough for most people. What we are missing now is a system, that is, a complete OS that is capable of holding a complete ecosystem around him. OS+OEM+User is not the whole story, ISVs and the relationship between them and the user is a huge piece of the success of a product.

Partially, because we relied on the distros to do that job for us lies the reason for our struggle in this regard, the problem is, Linux has historically only made bucks on the large IT deployments and not much more consumer oriented segments of the market, so that's where the focus has been.
People were fine with Windows 2000 and XP and they still are fine with it, more usability won't bring any more meaningful value to the user, it's the applications and games, and in that regard, I think we have a huge room for improvement. Developing, shipping and making money out of writing apps for GNOME or the traditional Linux desktop in general is really hard compared to other options. Specially when you compare it to the modern mobile options.
For most developers, there are actually very few reasons at all to write apps for GNOME these days other than trying to help the open source ecosystem. Which is a valid and noble reason to write apps, but it won't bring Photoshop, or Autocad, or iTunes, or Starcraft II into our platform. Back in the early 00s it wasn't as crazy to think about us as a community being able to catch up and rewrite the Windows 98 essential application collection for the average user at some point. I think we are stuck in that thought that if we replicate every single application the Windows users have we will at some point get the users. I think we need to run away from that notion, because we are a small community after all, we cannot write every single app from scratch. Focusing on helping others on creating, building and delivering their apps to the users, and having fun while doing so, and making a profit while doing so as well is a much more productive use of our limited efforts.
This is why OEMs find it really easy to work with Microsoft and Android, they get an OS and an ecosystem as a commodity. They can do what they do best, engage with some ISVs to ship some extra stuff it on their product and ship it to retail, hopefully building some momentum with some new piece of software.
Look at every single product launch or OS release at Apple for example, Adobe and Epic Games are examples of companies that develop apps during the product development phase so that on launch date a set of interesting and useful apps are available for the platform.
We are trapped in an chicken and egg situation, OEMs that do not build a healthy ISV ecosystem upon their GNOME successful products will not ship (or will ship and step back afterwards), and we can't build an ISV ecosystem because we have no devices in the shelves of Best Buys and MediaMarkts of the world.
Usability has nothing to do with this. It's the lack of apps, and how hard it is to create and ship them what prevents us from being ready to have an ecosystem, and that's pushing OEMs away.

A positive prospect for the future

Now, this is just a review of one thing we haven't quite focused on, we've achieved great many things, GNOME 3 being one of them, I'm proud of being part of even a tiny fraction of such effort.
The good news is that we've learnt a lot about usability and user experience over the past 12 years, we can easily apply those lessons to improve our developer experience and the relationship between those developers and their users. If GNOME Shell is the vehicle for users to use their computers and applications, then let GNOME OS be the vehicle for developers to reach those users and establish a relationship with them.
I strongly  think we can achieve this goal.
We just need to focus on allowing anyone to be able to write awesome, powerful, useful, both simple and complex, beautiful applications. Without having to interact with us in our mailing list because some piece of documentation is not clear, or because they cannot find the right API to achieve something because it's in some repo somewhere with or because it has a weird non descriptive name. Without having to learn three or four packaging mechanisms to reach every single GNOME user.
We also need to understand to engage with key players of the ecosystem, sometimes even with people that produce closed source, the news of Valve working on a Linux version of Steam is really good news, and whatever we do to help them will only render into a mutually benefitial outcome.

I am not saying that we are not making steps towards this goal at all, a lot of work is being done, but if we could concentrate the same amount of energy that we did for the 3.0 release on this goal, the possibilities are pretty encouraging.


21 thoughts on “Most people can only write software if they do it for a living

  1. IMHO…
    The big problem with GNOME is the developer experience. Or lack thereof.
    I think it basically boils down to that we have no big unified IDE. I hate to say it, but we need a “Visual Studio” for GNOME. Developing for GNOME is a circus with a lot of moving targets, hidden dependencies and undocumented practices. The documentation is outdated, insufficient or both. How often do i see [transfer-none] i HTML-documentation? So often that I now almost know what it means.
    Anjuta is my preferred IDE, but it’s also a moving target. I have used 1.x for many years and have grown to love its quirks and accept its limitations. Now I have been forced to use 2.x/3.x (from distribution upgrades) and it’s a mess. I can’t change my editor colors (besides switch between a few preinstalled themes) (same problem in Gedit), half of the features I’ve become dependent on in Scintilla is gone with Scintilla. Integrated Glade is cool, but it’s slow as hell, has lots of bugs and missing key features.
    I am really wondering. What environment is GNOME-developers using when developing software for GNOME and/or GNOME itself?
    (Sorry for the harsh words, but I really think this should be addressed)


  2. Anders, most GNOME developers use the terminal and a text editor (vim, emacs, gedit).
    I am not entirele sure an IDE is the main problem, for example Rails and Django are great developer platforms that are promoted as terminal+editor based and they are hugely successful, there’s no standard IDE for them.
    On top of that I personally think that MonoDevelop is a great IDE, and Eclipse could be a great GNOME IDE with a few pieces of integration. But I think we have bigger problems in our development stack.
    We have a fragmented set of libraries to achieve some basic functionality, and we are lagging on data driven apps infrastructure (access to databases and web services for example).
    The other problem is the myriad of tools needed to create a sane GNOME project (intltool, autotools, .desktop files, Make, bash….) It’s a nightmare, it takes weeks before you can create a sane tarball and a hello world if you are a newbie.


  3. Alberto,
    I could very well be wrong in my IDE-assumption, but I still think that we need a much better experience for developers, if we would like to attract more developers – resulting in more applications. I had a strong feeling that emacs/vim/make was the tools of the trade for GNOME-developers, it’s all I see at conferences. I have yet to see Anjuta (or Gedit) started besides on my own screen.
    Maybe Monodevelop has some potential. I have tried using it for developing C-code at some point. I don’t remember why I didn’t stick with it thou.
    Regarding the myriad of tools. As an anecdote I would like to mention that I’m the only person who can bootstrap a G-project at my workplace. Nobody else has the slightest idea what’s going on – but that would be almost okay, if it wasn’t for the moving targets. Clutter has been especially hard on us in that regard BTW – and GTK+/GLib/Cairo has provided the most consistent API’s over time.


  4. Trying to replace Windows on the Desktop is just a waste a time. The network effects are just too great. There are so many applications written for Windows, even if we had the best tools ever and the best experience, I don’t expect we’d ever catch up.
    Look at how long it took some major mobile ISVs (Instagram) to port to Android, despite the fact that it has more users and better tools. Going against an entrenched platform in an existing market is mission impossible.
    Instead, we should continue to make the best Free Desktop for those who use Linux. The only way we can make GNOME mainstream is if desktop applications go away. And maybe, with web apps, with stuff like ChromeOS, this is happening. If a pure-web thing like ChromeOS wins, then GNOME has a fighting chance. Otherwise, let’s not waste our time seeing Windows or OSX as the competition.


  5. Hi,
    I think you nailed a lot of important topics but neglected others.
    I am a spare time OSS developer and the situation for a Gnome developer is really frustrating. In my opinion got a lot better and is the way forward, but it’s just not yet there.
    The documentation is still scarce and scattered all over the Internet. And the worst, you never know if your library of choice is a good one since there is no central place where you could search for alternatives or deprecation warnings (think Glade vs. gtk builder, which canvas library is the way forward etc..)
    And finding good and still working code samples is like digging for gold.
    Another important tool is a good standard IDE. I just saw that at least points to anjuta. Do make it rock and promote it like hell. Or customize eclipse to be fully integrated and promote this (which I think would be the far better choice).
    But unfortunately it still seems to be elitist to program on the command line with gdb. Sure if it is the way it works best for you, do it by all means. But don’t believe that you can win any young kids hearts anymore which once used c# in visual studio.
    When I started programming as a kid, I pretty soon discovered Delphi and boy that was so much more productive and fun! I got hooked for a very long time.
    Right now I am a full time C++ developer on windows (yes shame on me) and the difference to Linux development is like night and day.
    Debugging an algorithm in a multithreaded program under Visual Studio takes me minutes vs. hours on Linux. Sure some will say that if I need a debugger to fix my program than I am doing something wrong but thats only half the truth.
    And to answer your question why does Django development work so good?
    Pretty easy, just compare the Django error page output to the information you get when your gtk application crashes!
    I just think the focus of the type of developer that Gnome wants to attract should be shifted. Don’t go after the experienced developers but go after the average programmer. From my personal experience I would say that most of the Windows programs are written by programmers which are average at best. But that doesn’t matter since they continue working since they never feel completely lost in contrast to what happens if you have to work with autotools or gdb etc.


  6. I strongly agree with your final point.
    A better packaged SDK with best-practices well laid out, along with solid documentation for newbie friendly langest like python would be helpful. Even if there isn’t an IDE that everyone uses, reccomending a good-default for someone new would be nice.
    My recent attempt to develop a gnome app was disappointing, as the amount of boilerplate code needed for a relatively simple UI was discouraging, and after spending an embarassing amount of time trying to pack hboxs right, I ended up with something that looked like a cruddy windows 95 tool. I ended up just filling a window w/ a gtkhtml widget and implementing the UI in html, since its easier to learn online how to make dynamic web uis then learning how to do the same in gtk or clutter.
    I did VB development 15 years ago. Its embarassing, I know. But its more frustrating to find developing a simple app was *much* easier 15 years ago then on your prefered platform today, and the end results don’t look any better.


  7. > It’s worth noting that people buying netbooks just wanted more portable and cheaper version of the traditional Windows desktop, and that’s why demand for netbooks shrunken after a while.
    Didn’t even read after that, this is plain non-sense. The Acer Aspire One running Linpus Linux was one of the most sold netbooks. Users were not that afraid of Linux, but unfortunately, some manufacturers did a really poor job at integrating their Linux distro of choice on their hardware (first MSI Wind commes to my mind).


  8. I agree, very much.
    webOS had much better developer support than GNOME does today, and it failed to gain traction. There’s simply no way we’re going to compete against Windows or OS X. Our goal needs to be creating the best experience, for both users and developers, and right now one of the biggest ways we can do that is by providing convenient access to web apps.
    Another way is to provide really elegant, streamlined, simple apps on the desktop, which integrate effortlessly with popular (and open-source!) web services. GNOME Documents is a step in the right direction on that front, IMO.
    Either way, better developer documentation will help, especially aimed at GNOME newbies who might have already learned popular web programming languages and want to write apps for their desktop. I’m hoping to help with the JavaScript tutorials for for that reason.


  9. I signed up to work on GNOME’s developer documentation as part of the 2012 outreach program for women. You’re right that it’s a mess, and that it needs a lot of work — I have to go through the exact same process of figuring everything out in order to do this. I’m just hoping to document everything, so that others won’t have to go through this anymore.


  10. On the subject of web programming languages: It’s actually pretty easy to write a native GNOME app in JavaScript! The documentation’s a mess right now, but hopefully it won’t be after I’ve spent this summer improving it.


  11. OEMs do a poor job integrating software with hardware in general. The only one I can think of that I consider to do a good job is Apple, and they write their own software.


  12. I think the reason for the situation you describe is that GNOME and Windows are very different animals, evolved to fill very different niches. And right now, GNOME’s niche is as enterprise software that’s used internally, with only internal developers working on it.
    I think that if we want to change that, we should focus on reaching out to new people, especially developers. But we can’t offer them the same ecosystem as Microsoft can, or the same financial incentives that Android or iOS can. Instead, we should be trying to bring in the people who would be writing for GNOME, but are turned away because
    a) They don’t know they can,
    b) They don’t know where to look to find out how,
    c) The documentation’s a mess once they get there.
    Right now, GNOME is largely developed using tools that most people don’t know how to use, by people who don’t bother to explain how they did it. Or who spend a lot less time doing so than actually writing code. If we want to bring in new developers, we should not just improve documentation, but improve our culture and processes so that documentation and outreach become as important as code itself. Otherwise, we’ll never have the volume (or quality) of code needed to attract new users and developers.


  13. I think you’re missing a couple of points about IDEs.
    First is that you’re right that terminal+editor is great, but those developers are already catered for. The VS-type developer really isn’t right now – and that option could be provided without taking toys away from the terminal gang.
    Second, to some extent I agree about django, but certainly not rails. There is no standard IDE for sure, but many developers are on MacOS using TextMate or something. I think this demonstrates that an IDE doesn’t have to be like VS, but it’s still doing a lot more than gedit/geany does.
    A good IDE can help paper over a lot of cracks – like a build system and fragmented library 😉 – and I agree with (down there vv) that monodevelop is a really nice system too.


  14. Yes. Mono tried.
    What I would love to see is ‘Gnome OS’. Just give up on the notion of trying to be all things to all people and just focus on bringing the best desktop experience possible. Everything geared towards greater usability, best default install possible, and best interactivity possible.
    In addition purposely restrict and formalize the APIs you are supporting.
    And don’t make the same mistakes that Nokia did for Meego. Don’t get all space-cadet on the architecture. Don’t try to write a new distribution from scratch. Just take what already exists and put the MINIMAL effort required to achieve your goals. Get the proof of concept out ASAP.
    I suggest base everything off of Fedora. That offers the best Gnome 3 experience and is the most friendly distro to doing new things.
    For example: A IDE.
    If you want the best IDE possible for Gnome the worst possible approach you could take would be to write one. Use Eclipse. So what if it’s Java? Maybe using it would be a good excuse to help make Java a first class language for Gnome, but that’s really not necessary at all. Just start using it and then figure out how to make it work best for Gnome, take your experiences and release a plugin suite for it so other developers can use it.
    Make a Gnome SDK. A gnome SDK with documentation, demos, Eclipse plugins and automatically have everything people need to start programming with any of the first-class programs that Gnome supports.
    When people run the equivalent of ‘make install’ in the SDK have it not produce binaries or install stuff all over a file system… have it produce RPMs. RPMs that you install using yum and can install and uninstall and be mailed to friends and put on the internet for easy downloads and installs.
    When putting together repositories of trusted software for easy consumption by end users don’t compile the packages from scratch. Just obtain the RPMs from the developers themselves. If the developers are doing something wrong help them do it right.
    For end users…
    Document as much as you can. Make product demos. Show people how to do the various tasks and special features that you are proud of. Text instructions translates poorly for the majority of people.
    Make install of ‘Gnome OS’ as uniform as possible. Don’t set up the installer to choose ‘roles’ or ‘tasks’. Remember your goal is just to produce a desktop OS. After storage is setup just blast down a install image rather then installing a billion individual packages.
    Btrfs has a beutiful feature call ‘seeding’ that can make this trivial. Using a seeded read-only btrfs OS you can do zero-reboot installs. The OS can boot up from live media, be migrated to read-write file system on a computer and then have the original read-only file system removed from the OS.. all without a reboot or umounting the file system. All ‘live’.
    There are all sorts of stuff like that that could be done massively better then the current status quo for Linux distributions.


  15. right now one of the biggest ways we can do that is by providing convenient access to web apps
    Agreed. So fix Mozilla bugs 745018 (Implement webapp runtime for Linux) and 744193 (Install web app on host OS – Linux). Linux needs to be better for web apps than other desktop OSes, otherwise all the work on native toolkits will be irrelevant as Haiku OS, GNUStep, etc.


  16. We just need to focus on allowing anyone to be able to write awesome, powerful, useful, both simple and complex, beautiful applications.
    Yes, by writing them in HTML5.
    Faced with lack of developer interest, every tablet and smartphone alternative in the last three years has said “Write HTML5 apps for our platform”. WebOS, Tizen, Blackberry BBX, etc. Meanwhile Linux desktops persist with the pleasant fantasy that with a better SDK or developer outreach or yet another language the developers will come. It’s fantastic that great programs like Firefox, Inkscape, LibreOffice, and VLC run on Linux, but the new apps are unlikely to come to Linux unless the HTML5 version of them “just works”.
    Can web apps using Google/Mozilla/Opera’s manifests all run under Gnome? Will Gnome support all the new web APIs for desktop features like notifications, contacts, and media access? Is anyone ensuring that the Mozilla B2G and Tizen APIs will work on desktop Linux? Are bookmarked HTML5 applications first-class citizens on the start menu? Can the package manager install web apps? Those issues will become hugely important. In comparison Gnome-specific IDEs and developer documentation are inconsequential.
    So long as Gnome/KDE/LXDE/Unity remain a decent container for running a top-notch browser like Chromium or Firefox, they have a chance of maintaining their small market share. I think their only chance to grow is to rethink the integration of the browser and desktop to be dramatically better. Things like unify desktop history and browsing history, navigate directories inside the browser, bookmark local files and applications, unify Location bar to launch local apps, etc. I don’t know of any project even attempting this; supposed browser-centric distros like BrowserLinux and JoliOS just offer a stripped down Linux that starts a browser.


  17. I quit trying to write GTK+ apps because GTK+ refuses to cooperate with the tools I use to maintain Quality in my software. The biggest problem of all: did you ever run Valgrind on a GTK+ app? Take the first “Hello World” example from the howto and run it on Valgrind. Do you really expect me to keep developing on a platform like that?
    Please improve that. I *want* to use GTK+, it’s the “de facto standard” of the Linux Desktop, my Desktop Environment is built on top of GTK+ (Xfce), but GKT+ just does not want to help me…


  18. Developer stuff is a big problem with GNOME. We really need to get our act together there. For some reason, I get the impression that our core GNOME/GTK+ team is shrinking..
    Another thing that would be good is to actual have a conference and invite ISVs and show off our platform. We don’t do that enough I think.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s