Analysis of the conflict among Canonical, GNOME, and KDE
blogs.gnome.org
blogs.gnome.org
It's far more critical in the Desktop world than in the Linux kernel because in the kernel, there is enough development in the kernel that there is strong incentive to develop in the upstream sources, and not behind distribution-specific source trees. In addition, the Linux kernel releases on a regular 3 month cycle. So even if we don't have formal design documents, it's a lot easier for collaboration between key kernel subsystem developers, because our patches have to come together and _work_ every three months when we push out a release. (In practice, they had better mostly work by the end of the two week merge window, or there will be hell to pay, and Linus, as the great benevolent dictator, will yell at people, and Make a Decision --- which will usually involve reverting the change which broke things functionally.)
In contrast, the Desktop world has a much harder problem, because (a) not everything lives in one source tree, (b) the kernel largely doesn't have a UI, and there are objective measures of "does it work", and "did the benchmark results go up or down", that either don't exist or aren't as important in the UI world. Questions of whether a UI is "good" or "better" than some other UI choice is a question which can't be easily answered objectively. And that, more than any thing else, is probably why we have three major design centers for desktop development: GNOME, KDE, and Canonical.
One of the things that worries me is that all too often, people look at the way things are done in the Linux kernel, and assume that it will port over to their project. In most cases, the Linux kernel is a much larger and more complex project, and things which we do in the Linux kernel world probably aren't needed in other projects. But in the Desktop world, I think the reverse problem is true. It's a much larger and more complicated ecosystem than what we have in the Linux kernel, and so decisions such as allowing the major subsystem developers to negotiate major technical changes organically and informally might work for Linux, but not in the desktop world. (For example, in the storage stack, there are less than a half-dozen people I would need to consult with in order to come consensus about some change to accomodate PCI-attached flash, and we have multiple opportunities a year to get together and work things out). Hence in the desktop world, hiring a full-time architect who did nothing else but talk to the different stakeholders and try to come to consensus on a common vision is probably something which is necessary, even though we haven't found the need to have someone in that role in the Linux development community.
What makes it even more frustrating to me is that not only are KDE, Gnome 3, and Unity all failing to cooperate successfully on shared resources, but they are all marching resolutely in the wrong direction, regardless of the pleas of the user community. So far as I can tell, everyone hates Gnome Shell, everyone hates Ubuntu Unity, and everyone thinks that KDE 4 has been a big mess compared to KDE 3. I see all of these projects as engaging in a slappy fight as they march together off the cliff of unusability and misguided redesigns.
And I'm afraid these types of conflicts happen in the non-free-software world, too, the most easy examples being recent stories about internal projects in Nokia and Microsoft. Things get messier when you want standards and interop.
The problem statement is easy: Have a way of separating notification items and applications, such that the notification item is part of the desktop and not part of the application. In other words, XEmbed sucks as a way to have notification items in a system tray. Anyone who has ever used e.g. GAIM in a KDE 3.5 desktop with a pixmap background knows exactly what I'm talking about, as GAIM's icon would show up as an ugly box with an icon inside, while the KDE application's would have a notification item with a properly transparent icon drawn.
Claiming that the entire idea was merely to hook up notifications into D-Bus is so far afield that it mystifies me completely, and claiming that no one has ever had issues because of this is patently false. In fact, the VERY EMAIL [1] that Dave quotes has an actual problem statement directly before it:
<quote> In the past few months in KDE we worked on a new way to represent the systemtray icons to overcome the following limitations:
-lack of communication between the systemtray area and the items, that mean we don't know about their status, their importance of if they are being used or not
-the xembed process is quite slow and doesn't give control to the systray on the paining
-it's not possible to have more than one systray (useful in multi monitor setups)
</quote>
I know this because I actually bothered to use GTK+ and GNOME software even with my KDE desktop, but now I wonder if Dave has ever tried the opposite.
I also was passively watching the threads as they happened back in the day, and stating that there was disagreement due simply to lack of a problem statement would be flatly false.
Dave then goes on to accuse Aaron Seigo and Marco Martin of being obstinate in their positions by that point, which simply does not mesh at all with my memory of things. For instance, A GNOME Panel hacker named Frederic Peters mentioned that it would be nice to be able to merge launchers with notification icons [2], an idea that was warmly received, not thrown out [3].
In addition, given that the implementation changed several times during just the KDE implementation period, there would have been no major problems with even incompatible changes to fix problems. For instance Aaron Seigo in reply to Dan Winship recommending a different way to send notification signals over D-Bus mentioned: "yes, this is a nice idea for limiting the bus traffic. would require an incompatible change to the spec, but it is doable." [4]
I'll read the rest of the article, but if this is the kind of "uncontroversial" fact stating that's going to be going on then I'll probably just unsubscribe from the xdg list and get on with my KDE developing life...
[1] http://lists.freedesktop.org/archives/xdg/2009-September/011... [2] http://lists.freedesktop.org/archives/xdg/2009-September/011... [3] http://lists.freedesktop.org/archives/xdg/2009-September/011... [4] http://lists.freedesktop.org/archives/xdg/2010-January/01122...
Id like to see a desktop development model more like modern web development - UI in HTML5/javascript/SVG, json data messaging, UI & system events coming from a port [eg. shinetech/eventserver], able to write small server-like plugins in Node.js / C / Ruby / lisp that can provide services and be remoted away from the UI.
Would be nice if some of this was reusable across OSX/Win/Linux. Perhaps my desktop work should be done in the browser?
The old unix guys might have approached it this way if they had the current web at hand to reuse/augment/embellish upon. Maybe this is more in the true spirit of unix than QT/GTK/Xwindows?
https://lwn.net/Articles/430686/ https://wiki.ubuntu.com/Unity https://wiki.ubuntu.com/Unity?action=AttachFile&do=get...
A technical overview can be found at Owen Taylor's blog http://blog.fishsoup.net/2008/10/22/implementing-the-next-gn... It's old, from when the shell was just being planned, but all the major architectural decisions are there.
Sounds a lot like HP webOS (originally developed by Palm). They even include Node.js for non-GUI services.
I really hope this won't happen anytime soon.
While everything's possible, HTML+CSS is a really horrible choice for UI description, and the whole webapp stuf is a kludge. Webapps are only done this way because there's no other choice.
Developers are running away to more higher-level abstractions, which provide things that are completely missing in bare HTML+CSS. For example, there are so-called layout managers, which are at the core of every sane widget toolkit, but in HTML world, are only emulated with plugins like jQuery.UI.Layout (or implemented it pure HTML+CSS by re-inventing lots of boilerplate code).
Cappuccino and SproutCore have a very good reason behind them.
The pain is almost all in the area of browser compatibility.
I kind of agree with your point, in that I think there is a layer missing [ eg. to make resizable UI work well ]. But I think that layer is best implemented in Javascript upon SVG/DOM.
As a comparison : I've used XCode's Interface Builder, and then thrown it away and written iOS UI Layouts by hand, and apparently Im not alone in this. Then I compare that to how much less code I'd need to write in Javascript for the same UI. [ I have implemented HTML5+js UI for iPad that looks like native Cocoa]
Dont get me wrong, I think Cocoa is a good traditional API. But compared to SVG+js APIs such as Cocoa/QT/GTK feel incredibly verbose, slow to iterate and brittle, IMO.
Could you, please, elaborate on this choice?
Why not, for example, Tcl/Tk? For a simple example, take a look at http://www.tkdocs.com/tutorial/firstexample.html. I doubt it would be simpler in any combination of HTML+CSS+SVG+JS (and, for example, it would be problematic to have system-wide look-and-feel)
One of the most important changes is the gobject-introspection work, which allows library authors to annotate their library's API in a way that allows bindings to be automatically created for any language. This is how GNOME Shell is able to use Javascript to call into GTK+3. Developers wanting to develop for GTK+ in their favorite language, be it Ruby, Python, Lisp, C#, D, or anything else, don't have to write bindings themselves or wait for someone else to write them.
Many new GNOME applications and libraries are being written in Vala, a language with an object model based on GObject but a syntax like C#. It offers a modern language with garbage collection, and everything compiles down to C in the end. The same compiler can also compile a language called Genie, which is designed to have a syntax similar to Python (although, in my opinion, it hasn't done a great job at that yet, and I've seen no use of the language in the wild). It also compiles down to C.
Tensions are high in the FOSS desktop world right now but that's nothing new. Flare ups like this come and go. Sometimes the problems are fixed and we find new ones to argue about a few years down the line. Sometimes the wounds fester, become gangrenous, and people leave for good.
Most of us just want to write code we can use and have fun writing.
I'm totally unsurprised that Shuttleworth's penchant for decision by fiat and Jobsian cargo-cultishness has driven a wedge between his company and others in the FOSS movement. (For example window controls, before windicators were announced: "Yesterday I decided to move window controls to the other side for our LTS. It's for a secret project. DO NOT ASK ME WHAT THE PROJECT IS."). But I'm also unsurprised that disorganization and what also appears to be at least a little ego and maybe even jealousy has warped things on the other side as well.
This is a huge problem, as I see it. Even in OSS, where you have very capable people, someone needs to provide direction. I'm reminded of a military story, which I will paraphrase.
Single most important thing in warfare is to have a known objective. That way if the person in charge is killed, as is the second in charge, the troops still know they need to take that hill or everyone dies.
I take the same approach to software and it has worked my entire career. If Gnome doesn't have a stated vision/objective, it is no wonder it looks like chaos to someone outside!
Someone from Gnome _should_ step-up and provide some leadership, some technical direction, some market direction or some general foresight that things are going in the right direction. I hope the author is wrong and there is someone already doing this, but if not...
Hard feelings and lack of communication between competing UNIX desktop environments ... where have I heard this before?
(not trolling, I honestly don't know what it is that you mean)