GNOME is a project to bring missing technologies to Unix. I started the project in August 1997 with Federico Mena. Since then GNOME has grown to be one of the largest free software projects. You can read the story of the GNOME project here as well as the story of Ximian. The GNOME project has produced a number of interesting technologies targeted to fix various issuesin Unix-like systems. The project's CVS repositoryhosts the work of aproximately six hundred people who work in the various pieces of GNOME.
The major releases of GNOME are GNOME 1.0, October GNOMEand Bongo GNOME. In October 1999 my friend Nat and me incorporated Helix Code. Here is the history of Helixas I recall it. We launched the first Helix Code product: Helix GNOME in March 2000. GNOME got a major support when the GNOME foundation was announced in August 2000. As part of this announcement Sun Microsystems adopted various of the GNOME technologies as their user environment for the Solaris operating system in August 2000.
Within GNOME I have written a number of applications, toys, patched various applications and libraries and posted a bunch of messages as well as raising awareness of the Bonobos.
The Midnight Commander was started in 1994 is a file manager for Unix systems based on the user interface of the Norton Commander for DOS-based operating systems. This project is the first free software project that I managed and led me to meet a lot ofgood friends. Radek Doulik for instance, one of the first contributors was also one of the first contributors to GNOME (he wrote gtopand gmap) and later joined us at Helix Code.
The Midnight Commander was the first free file manager to include a virtual file system switch. Inspired by the archival-browsing feaure in the DOS-based Norton Commander, the virtual file system switch allowed an application (in this case mc) to access with a Unix-like API files stored inside archives, remote systems, ssh connections and more. Pavel Machek later wrote Podfukan NFS server that used the mc-vfs internally and allowed any application in Unix to browse any mc-vfs url.
Norbert Warmuth became a co-maintainer for the program in 1997 and 1998 as I shifted my focus to other projects.
In 1998 I wrote a port of the Midnight Commader to GNOME (gmc). This was a mistake as the code base was not abstracted correctly enough for becoming a GUI file manager. We should have rewritten a new file manager at that time. Ettore would eventually begin a new project (gnome-fm) that would be one of the two seeds for the Nautilusfile manager.
Federico became the maintainer for GMC by the end of 1998 as he went to work at the Red Hat Labs. A task he quickly gave up as soon as possible. Today a group of volunteers maintains the software on the GNOME CVS.
Gnumeric is a very complete spreadsheet that I wrote for GNOME. Gnumeric's internals are one of the best pieces of code I have written, and I have tried to help people provide contributions to Gnumeric that are maintainable and clean.
I started working on Gnumeric in the summer of 1998 a couple of weeks before Federico left Mexico to work for the Red Hat labs. Gnumeric was the first application to use extensively Federico's GnomeCanvas widget. Many of the requirements and implementation details of the Canvas were the result of needs in Gnumeric. Ever since, Gnumeric has been my test bed for new GNOME technologies. Gnumeric was the first major application to push the use of Glade and LibGlade. Gnumeric was also the first application to be ported to use the GNOME printing architectureand Gnumeric was also the test bed for Bonobo.
One of the most important goals during the development of Gnumeric was to raise the bar in terms of quality of the user interface. Gnumeric's user interface is heavily inspired by Excel. We have tried to keep Gnumeric as a high-quality product across time and to always provide the best user interface elements. Most of the usability features in Excel are available in Gnumeric as well. Gnumeric is availablefrom the GNOME CVS
Evolution is the best e-mail, calendar and contact management program for Unix systems. It is a product that Ximian developed, learn more here
One of the major missing pieces in a modern Unix system is a component architecture and the various layers defined on top of it. Bonobo is a component architecture built on top of CORBA that is significantly inspired by Microsoft COM and the various interfaces for component programming and compound documents.
By using Bonobo in your application or component, you can make the functionality of your application available to other desktop applications in the system that can reuse your code as a component, or let people control the application remotely from a scripting language.I wrote a paper that describe some of the problems in Unix, and how Bonobo can help improve this situation. One of the first documents describing Bonobo is available here.
Bonobo support originally was something that was added to an existing application (gnumeric, sodipodi, xpdf are all examples of these applications). Later we started writing applications whose backbone was based on the BonoboObject base class: entire applications were then written using this component approach (the Evolution personal communications tool, the Nautilus file manager, and the Gnumeric graphics engine are some examples).
Bonobo 1.0 will be part of the GNOME 1.4release. Currently it is undergoing a number of important changes that are required for the integration with the OpenOffice UNO component technology.
Raph Levien designed and implemented the original version of the GNOME printing architecture which provided an imaging API for GNOME applications to use. This imaging API is inspired by Postscript but it includes two extensions: alpha channel support and anti-aliasing. GNOME applications use this API to print their contents and hence can get a number of interesting features: compound document printing, multiple printer drivers, on-screen previewing and more.
I took over the maintainership of GNOME Print in 1999 where I expanded it and improved it to fullfil the various needs of applications in GNOME.
The two major changes I did to gnome-print were: implement the print preview context and I implemented the base plug class where native printer drivers would be hooked up. Ever since, various hackers have contributed large ammounts of code to improve gnome-print. Some major contributions by my friends:
- Michael Zucchi made the whole printing process simple when he developed the
- Chema Celorio worked on various gnome-print drivers and is working on plugging gnome-print into a general printing framework that goes beyond imaging: spooler integration and printer capability control
- Lauris Kaplinski added improved GNOME Font support; Unicode support to the API and transparency emulation for those printing contexts without transparency support. He is currently the maintainer for gnome-print.
The GNOME Calendar application included in GNOME's gnome-pim module was originally developed in record time: Federico and I implemented the Calendar in ten days. The code did not contain any substantial bugs and although it was extended later quite a bit in the user interface area, the design was pretty good. I eventually got a Palm Pilot and wrote the original calendar syncronization for the Palm Pilot in GNOME in two more days.
Federico was the maintainer of GnomeCal for quite some time while working at Red Hat. Various new user interface features in GnomeCal required a few modifications to the Gnome Canvas.
GNOME Calendar is a very feature limited calendar application. It supports the vCalendar file format and has no group capabilties.
The GNOME Calendar is being phased out these days in favor of Evolution's Calendar system. Evolution's calendar system supports iCalendar, iTIP (for groupware meetings), iMIP and it is fully model-view based. GnomeCal proved to be a good experience to know what the various issues were regarding its architecture. Evolution's information store is not in the GUI application, but instead resides in the Wombat, a GUI-less component that works through a model/view request/notify system. This for instance allows multiple user interfaces for the calendar to exist (Before you get too excited about multiple user interfaces: the user interfaces are typically the full GNOME user interface, or the syncronization client for PDAs).
In december 1994 I joined David Miller in porting Linux to the SPARC platform. We presented a small article with more details about the port at the UseLinux conference (HTML, PostScript).
I did work on the kernel, a bunch of the drivers, X11 and on the userland (ported the libc 3 times, the a.out, the libc5 elf and the glibc that was later finished by other members of the team). Here I found my friend Jakub again (we had worked in the past on the Midnight Commander, where he had implemented the tarfs, did the timeouting features and the beginning of the ftpfs, later finished by Ching Hui).
Ingo Molnar and I started work on the software RAID implementation for Linux in November or October of some year I forget. Later Gadi Oxman joined in the fun. I presented the work at the Linux Expo in North Carolina.Ingo later was hired by Red Hat and took the Software RAID code to the next step. Linas Veptas used to maintain the RAID FAQ.
Afterwards, I did some work on volume support for ext2 (I lost the patches, but sct keeps some of them handy). I also did an attempt at adding logging to ext3, an interesting learning experience, I found some old patch of it here and have no idea on what state it was. Stephen of course did the complete thing some time after my attempt.
Larry McVoy and Ariel Faigon had been trying to get my a couple of Indy machines to work on the Linux/SGI port for a long time. Even before David was hired by SGI over a summer to do the port. The paperwork to get this done took so long that about two years passed before they could get me the machine.
When I finally got the machine (after a huge mess to get the machine as Mexican customs do not allow used computer equipment to enter the country) I worked with Ralf on various things in the Linux/SGI port. The most ambitious part was getting the native X server to work on the Linux/SGI. The kernel was unstable enough at the time, that debugging it was not fun. And it was also the time when GNOME was created, which took my attention of the port.