In any field, one of the primary reasons why good ideas may not catch up is inertia. People are happy with what they have. They have spent time and gained expertise so that they can fit available tools to their needs, or even create workarounds when faced with different problems. When new tools become available people are reluctant to use them. In the case when the new tools are introducing new concepts and ideas, their adoption is even slower. People need some time to discover the new abilities before actually using them.
Any UNIX programmer who goes beyond the command line interface soon discovers that he/she needs separate graphic libraries called toolkits. These toolkits can make the X Window System look and act in different ways. Since X does not favor any particular toolkit, several solutions exist today. Of course some toolkits are more mature than others. Some are commercial and some free. Some are for C and others for C++. You can find many resources across the Internet which compare X11 toolkits. Most toolkits share however one common factor. They are all affected by industry concepts (rapid prototyping). They are built so that programmers can quickly build a (mostly) useful but not always pretty application. Animations are non-existent. Themes are an afterthought (sometimes even a hack). Performance tuning comes second to feature abundance. Each toolkit advertises several widgets which apply to specific cases but are useless to others.
A handful of graphics toolkits are extremely popular. They are mature, well developed, and well documented. Some even enjoy the backing of major companies. Two of them are actually the foundation for modern UNIX desktop environments. Using these toolkits is straightforward. The resulting applications look and function in a way familiar to the majority of computer users. But what if you want something more? What if you want animations, transparent components, and themeable applications? Your options are fairly limited. Rather than using OpenGL for pure 2D or even resorting to low level Xlib functions, jump right into EFL and discover what you can do with this set of powerful libraries.
We believe that EFL is not just another toolkit. You can use EFL as a toolkit (the EWL/ETK libraries), but you will probably miss all the fun. EFL has some new concepts, which if applied correctly will make your applications do things you could only imagine so far.
Back in 1999, the Enlightenment window manager (version 16 then) was offering people with eye-candy much ahead of its time while still retaining usability. Several graphical effects (windows sliding in, shading animation, the ripples and waves) were quite revolutionary for a window manager. Theme support was extensive. While most applications supporting themes actually mean the colours and skins of the interface, the Enlightenment interface could be almost everything. Themes could be completely different considering most aspects. Several themes were so complex that would eventually make Enlightenment resemble different systems (Mac OS Aqua, BeOS).
Enlightenment was also at some point integrated with Gnome. While Gnome has progressed since then and now comes with its own window manager (Metacity or the older Sawfish), the fact is that Enlightenment was installed on many desktops at the time. Version 16 is still the latest stable version of Enlightenment. It is updated even today with patches. This means that today Enlightenment v16 is a very stable window manager. Since its resource requirements are roughly the same, what used to seem a heavyweight window manager is very light indeed with modern personal computers.
So why don't we have a new version of Enlightenment today? And why has the development version (v17) not yet been released after so many years? The fact is that the Enlightenment developers, having gathered experience from v16, do not want v17 to be a simple window manager. Instead version 17 of Enlightenment is a "desktop shell". The infrastructure of this desktop shell comes in the form of separate graphic libraries called the Enlightenment Foundation Libraries (EFL for short). Enlightenment is now based on the EFL libraries, which can also be used for normal applications apart from the window manager.
While this concept is fairly interesting, successful marketing of it is harder. Most people who visit the Enlightenment pages think that this is the start of a new desktop environment (like KDE and GNOME) and that EFL is simply another X11 toolkit (like QT and GTK+). This document will try to address these common misconceptions and attempt to give you a glimpse of what EFL is capable of.
The document you are reading attempts to explain some basic concepts of EFL rather that act as a programming guide. If you are looking for technical information regarding EFL, take a look at the guides written by the developers themselves. Available guides are:
- The EFL Cookbook
- The EWL Book Reference
- The Edje Book
The EFL Cookbook contains common recipes for most EFL components. A good read in order to discover some of the endless possibilities of EFL.
The EWL Book provides background on the common widgets provided by EFL. If you need to use EFL as a GUI toolkit, this is the proper document.
The Edje book contains almost everything you need to develop themeable EFL application which use the Edje Layout engine. Make sure that you know a bit about Evas (the EFL canvas) before reading this document.
If, on the other hand, you need to dive straight into coding, consult the reference documents for core EFL libraries. These are generated automatically by Doxygen, so they are the closest thing to code documentation apart from code itself. Available reference guides are:
- The Ecore Reference
- The Edje Reference
- The Eet Reference
- The Evas Reference
- The EWL Reference
All of the documents mentioned above can be downloaded from the Documentation page at the Enlightenment website.
You can always look directly into the source code. Most of it is well commented. The syntax is clear and straightforward. If you become familiar with functionality not already documented, consider sending a patch with needed documentation.
Once you want to actually start using the EFL libraries you have the following options:
- Getting binary packages for your distribution.
- Downloading snapshots of selected libraries.
- Downloading directly from CVS.
- Running/installing the E-live CD.
Downloading binary packages (e.g. rpm and deb) for your distribution is the preferred way. Since Enlightenment and libraries are not released yet officially, this is not possible. You have to track unofficial packages prepared by enthusiastic users. While this might be the safest way to obtain EFL, it actually means that you depend on the packager. If packages are not updated regularly, you are on your own.
The recommended way, if you are not adventurous enough, is downloading the source packages from freedesktop.org. These are updated regularly by EFL developers once they think that the libraries are in a stable state safe for a snapshot. Note that not all available EFL libraries are posted there. You miss experimental stuff, and, of course, you can only update when new versions are added. Still, the sources compile cleanly, and you can always get more bleeding edge stuff from CVS if you want it.
If you would prefer the latest and greatest, you can download the source directly from the CVS servers. This is is the preferred way if you want to submit bugs or patches and generally get involved in development. CVS builds are known to break. If you download your snapshot while a developer is undertaking major changes, it is pretty common that your copy is non-functional. CVS also suffers from problems outside of the control of core developers. Availability of the CVS server and load has lately been a problem (hopefully solved).
Finally, you can download the E-live CD. This is a Live CD based on Enlightenment and Debian. It is a great way to see EFL in action without touching the system or to show off to your friends. If you are really impressed you can install the CD to your PC and get a Debian GNU/Linux system with the EFL libraries pre-installed.