Now that the cat is out of the box, I can finally tell you a bit more about this project. You probably have seen all the press releases, so I don't need to recap what you can expect out of it as a user. This is about what's in for you as a developer, because this is what has attracted me so much as well. Please note though that I'm not speaking officially for FIC here -- this is my personal take on the project.
For years, the embedded open source community has been lusting for a hackable phone. A lot of (more or less successful) open source efforts went around putting Linux on hardware running WindowsCE based operating systems. All in all most of these were frustrating experiences, because reverse engineering is just a terrificly time consuming approach and by the end of the day, it's of questionable legalty as well. If you really manage to put Linux on a phone without the help of a manufacturer it will take you so long that by the time you're done, it has been already obsoleted. This has happened a lot of times in the past and we want to change it -- since although the work being sort of educating and fun (at times), it's a lot of wasted effort that most of us would rather spend working on actual applications.
Up to today, there is nothing like an open phone available. Instead, most of the so-called "open source friendly" manufacturers are trying to lock you out -- by using SElinux, booting signed kernels only, etc. The FIC Neo1973 is different.
The partnership with FIC is a unique opportunity for developers who care about projects like GPE, Opie, OpenEZX, XanaduX, and friends, since it enables us to make a phone software stack done exactly the way we like it -- "bottom-up" standardization instead of doing it "top-down". The OpenEmbedded community has quite a lot of experience when it comes to integration issues and this is why the OpenMoko distribution will be an OpenEmbedded derived Linux distribution.
GUI-framework wise, it has been an easy choice. Most of the application hacker momentum is focused around X11-based frameworks like Gtk+, Qt, wxWidgets, fltk, fox, and the like. There is absolutely no reason to not base your phone GUI framework on one of those toolkits and this is why we chose the X11/Matchbox/Gtk+ combination for this phone platform. Being a strong supporter of C++ and Qt though, I'm very interested in getting this effort to a point where it's possible to write e.g. Qt phone applications that run inside the Gtk+ based UI framework and don't look alien.
Consequently, given a GObject-based C framework, adding language bindings should be a straightforward task as well. FIC has understood that this will be an iterative process. We don't expect to present a fully featured phone when we start shipping it in Q1/2007, but we rather adhere to releasing "early and often". By working together with the open source community guys right from the start, I believe in FIC's smartphone division establishing a solid and healthy relationship. This will hopefully include device discounts for developers as well as listening to us about future hardware platforms. If we manage to make this a successful proof-of-concept open source device, we might be in a position where our wishes about the shape of things and the type of hardware to include in future devices might reach very open ears.
Update: Some clarifications, since I've seen a couple of wrong facts on various sites:
I'm very pleased to be able to attend the first conference on business case and technology: Open Source in Mobile in Amsterdam this week. Not only will this be a great opportunity to discuss the merits of open source with business guys and operators, but also a chance to talk about the project I have been working on for the last couple of months...
In the project I'm working on, we want to have a visual user experience that is guaranteed to blow you away. Eye candy and usability combined. This is about eye candy.
In theory, the Gtk+ theming capabilities are good. In practice, it sucks. I won't go into complaining about the most underdocumented area of Gtk+, but if you want to attract commercial developers who need to rely on being productive and effective right from the start, then Gtk+ is giving you a lot of headaches.
The usage of X11 and Gtk+ as the GUI foundation for embedded devices is increasing steadily, however the Gtk+ theming possibilities are merely adressing the needs of desktop systems. Of course, I am not the first one realizing that. Nokia decided to fork Gtk+ for their Maemo UI -- between you and me, one of their worst decisions as developers really hate having to compile a seperate Gtk+ version for Maemo developing. Consequently, this is a no-no for our project.
The worst thing is that Gtk+ treats widgets (instead of images) as first class entities, that means it will scale your images according to the size request of the widgets, not vice versa. Widgets are scaled according to their layout and the internal widget layout and size -- which is defined through hardcoded widget code. If you don't let images to be stretched, they might be clipped (e.g. in a checkbox) or drawn partly outside the parent widget (e.g. for an arrow).
This scaling facility is nice for desktop systems, but in embedded systems this is a nuisance, because you usually
Another requirement is overlapping widgets. The Gtk+ team canon is "Gtk+ doesn't support overlapping widgets". Well, this is really bad. A typical use case is a dashboard kind of user interface which contains the static portions of the UI in form of a bitmap. Since you don't want to implement all widgets on your own, but reuse the GUI toolkit logic, you need to overlay stock Gtk+ widgets on top of this fixed bitmap / layout.
Gtk+ just can't do that. Even if you think you are smart -- e.g. trying to a set a background pixmap to a GtkVBox or a GtkAlignment, hoping it will shine through the widgets you add to the container -- you lose. GtkContainer derived widgets are transparent widgets by definition, they don't have a GdkWindow and they don't draw anything on their own. So what now? How about forking Gtk+ now? No no no no... there must be a better way...
I have found one. After three days and nights wrapping my head around Gtk+ code, I managed to write a couple of widgets which support overlapping. I have derived custom widgets from
which not only support a background pixmap overlapped by Gtk+ widgets, but also the option to hardcode the size through the style sheet, i.e.
style "mydashboard" {
bg_pixmap[NORMAL] = "dashboard.png"
GtkFixedOverlay::size-request = { 0, 480, 0, 120 }
GtkFixedOverlay::cargo-border = { 40, 380, 10, 80 }
}
widget "*.mydashboard-widget" style "mydashboard"
It's not perfect, because for some cases it still involves hardcoding inside the application, but it's a huge step forward for dashboard-style embedded user interfaces. These classes have been created for my current client, but will be open sourced soon -- together with the complete project as well.
The two days event run by Trolltech in the Hilton Park Hotel in Munich was fully loaded with
Add two nice giveaways (a Trolltech branded backpack which is really usefully designed + a Trolltech shirt) and a lot of friendly Trolls and you have an event that was really worth to attend.
For me, the most impressing issues were:
1. Matthias Ettrich announced that Trolltech is working on Qt for Windows CE and that it's supposed to be out in 2008. This is an important step that may have serious impact to Embedded Linux. Basically, it means we have roughly one more year left to shape our platforms. By 2008, Windows CE will be a much stronger competitor than it ever was.
2. Thanks to the new Interview framework -- which is slightly based on the Model-View-Controller design pattern -- a lot of new possibilities for presenting and manipulating data in QListViews arise. You are using classes derived from QAbstractItemModel to interface with your data model and you are using classes derived from QItemDelegate to do custom painting per item or derived from QAbstractItemView to control the layout or even the complete viewport. The possibilities are endless and starting by now you can (finally) resuse data models and data views seperatly -- which is a great thing.
3. Qt 4.2 contains a revamped version of Multithreading support. The most useful fact is that there are per-thread event loops now. This makes signalling between threads much more easy, e.g. signals are thread-safe nowadays, because slots are no longer called from the context of the emitting thread. This is one great feature that users probably won't recognize, but it allows for reduced latency and more simple (hence less error-prone) algorithms.
4. Customizing the Qt look previously needed deriving a custom class from QStyle which implements drawing the widgets. In Qt 4.2 Trolltech seperated the widget look description from actual code by using a description language similar to CSS which is parsed on-the-fly when widgets are drawn. This enables designers styling your application, not coders. It blows away Gtk+ RC files. Interestingly, it's quite similar to what Enlightenment's Edje can do -- I guess both used CSS as inspiration.
5. The canvas is back! And it will blow you away. Visualizing complex data has never been so easy and powerful. I can't wait to write the first application using QGraphicsView.
The ones of you who know me from the Opie project are probably wondering why I didn't say anything about the GreenPhone yet. Uhm, well, ... I don't feel very excited about that. It's good to have an "open" (it's still not clear whether the libraries will be open source) Qtopia platform, but it comes two years late, the "SDK" is a joke (they really should hire someone with OpenEmbedded experience) and I'm afraid the community has moved on to X11 (that is: kdrive) and Gtk+.
I'm looking forward to be on board for the DevDays'06 and want to express my gratitude to Trolltech which made it possible for me (and a lot of other open source developers) to attend this conference - thanks!
The three days in Berlin were fun while begin efficient and productive at the same time. I guess most of it boils down to the small amount of participants. If you are less than 10 people, you can discuss informal without the need of a moderator-operated discussion protocol. This made it an event that I really enjoyed.
From left to right:
Missing in the picture are Henning 'Woglinde' Heinold and Rolf 'Laibsch' Leggewie.OEDEM'07 is scheduled to take place in Poland early summer next year. If you want to sponsor this event, contact us.
My recently acquired Thinkpad X60s just arrived a couple of days ago and naturally the first thing I had to do was to install my Linux-Distribution of Choice to get a nice mobile development workstation. Getting there wasn't that easy and since there are already documentations for installing other Linux Distributions, I just thought I briefly share my findings with you.
[to be continued]
I enjoy going to conferences. When I was younger, I really loathed travelling. Now that I am much more open minded, I'm having fun seeing other towns and countries and meeting people from all over the planet.
Currently I'm looking forward to attending two important conferences next month:
Nearby... since I need to work during travelling, I have just ordered a Lenovo Thinkpad X60s -- crossing fingers that it will arrive before the first conference is due.
Today I have submitted my Ph.D. thesis "Component-based adaptive Middleware for mobile distributed systems" to the examination office!
My thesis shows how the encapsulation of distributed systems middleware functionality into components can lead to an adaptive middleware system that -- by the means of a reflective architecture -- features dynamic adaptation to changing application requirements and to changing environmental conditions. Using the developed µMiddle architecture, you can add and modify
and more directly within a running middleware system using a highly abstracted graph-based Meta-Object-Protocol that guarantees safe and consistent changes.
This kind of capability is of increasing importance for next generation mobile distributed systems and leads to more flexible middleware and application architectures.
Subject to the agreement of the board, I will get an appointment for the public defense of my thesis -- hopefully not later than December this year.
I want to acknowledge all of you who supported and believed in me in the past 5 years -- thanks!
NDAs are pretty common in freelance work projects. The acronym NDA stands for "Non Disclosure Agreement", which basically means that you are not allowed to talk about anything related to clients, vendors, hardware or software specifications, market strategics, etc.
While I understand (and of course respect) the origins and purposes of NDAs, sometimes they're troublesome anyway. For instance, I am working on a really really cool project that is eventually going to be Open Source and have an important impact there, because... I would love to tell you more, but I'm not allowed to :)
This is a difference between academics and businesses I will have to live with.
Since May 2006 I'm no longer employed at the Frankfurt University (they have limited 5-year contracts for offspring researchers) and getting time to proceed with my doctoral thesis got much harder. I had to find calm periods between starting my freelancer career and a lot of everyday life things that were to handle.
Shortly before my one-week vacation on Ibiza, I handed a release candidate out to my doctoral adviser and -- despite a lot of short comments which I need to take into account for the final version -- I got a fairly well review. In particular this means, that as soon as I found a 2nd referee for the thesis, I will be able to submit it. If all goes well it will happen in September 2006.
Polishing the dissertation makes more fun, now that I can see the end of the matter.