Category Archives: Free Software

Free software news and reviews.

systemd!

Yeah, I did not write for a while, but that does not mean I’m dead or changed interests, just that running an always growing company is taking lots of time, with the spare time I get being invested in something interesting and relevant, usually that does not translate to blog posts :-P  However I felt like doing it today.

While most people know me due my graphical user interfaces work, likely related to Enlightenment, I’m one of those guys that like to consider the system as a whole and not just a subset of it. My main interest since 1998 is graphics, from good old days of tcl/tk and gtk1 to pygame/sdl to qt3/4 and later enlightenment. But I always kept an eye on other bits like boot, networking, sound and so on.

After getting into ConnMan to have a good (and fast) network infrastructure, I started to consider similar bloat-reducing options to other parts of the system. Talking to friends like Holtmann, Lennart and ProFUSION co-workers about the stupid stuff we do in our distributions, like abusing shell scripts for no good… even tried to resurrect Gentoo’s bug #69579 (Bootup Time Reduction/General Speedup).

My first idea was simple, hackish and selfish: as I’m Gentoo user, I could write a shell script compiler that generates threaded-C code with the exact state machine I’d have using /etc/init.d with OpenRC. It was simple (or not so complex) as most of the scripts are start-stop-daemon wrappers with dead-simple usage of OpenRC’s dependency information (need, use, after, before…). However it was hackish because couple of them are not simple and would require hacks, either special cases or rewrite them natively, to make it work. Last but not least, it was selfish as likely it would just fix my problem, or with some luck it could benefit Gentoo as a whole. All of that after I loosing faith in Upstart of couple of tries and talks with related developers.

However sometimes it is better to talk to smart(er?) people before you go do your own stuff. I don’t feel like I suffer from NIH-syndrome. So talking here and there, João Paulo pointed that Lennart had a still secret project to do exactly what I was aiming, but knowing Lenny, it ought to be good. So I immediately /q -freenode mezcalero and started chatting, with he demonstrating a great cleverness and even proving me wrong in some assumptions, he already thought of much more like merging inted features and how to isolate services in their own control groups… yeah, he got me in systemd’s bandwagon.

As I still have tons of other stuff to do, I put the idea on hold and went back to it after several posts and announcements that Fedora 14 would use it. At the first free time slot I checked out the code and Gentoo’s “port”. Well, as expected with young projects it did not cover some special cases, like systems without IPv6 (mine) and Gentoo’s /etc/init.d scripts were too smart due OpenRC’s dependency resolver that would make their usage more harm than good. So I had work to do, but it was done and contributed back, with awesome results.

The project and community, also composed of other nice and helpful hackers such as Kay Sievers and Michael Biebl and I felt like it was an excellent project ProFUSION could collaborate, then we invested 2 developers to help it: Fabiano Fidencio and Lucas de Marchi, that got it running on Arch (OpenEmbedded on the way) and added some missing features, like native poweroff/halt/reboot, compile time toggle to disable SysV backward compatibility and so on, runtime fallbacks if no IPv6 and so on.

Right now systemd is very powerful, it can almost fulfill all my needs and likely can manage everything an embedded system would use on its own. From its lightness that reduced my boot in 10s and 2000 process, to nice helpers like its syslog-kmsg bridge. In my opinion, the biggest missing feature is cron-like features to reduce yet-another daemon from boot and centralize it in the “system daemon — systemd”.

If you don’t know it yet, give it a try. It’s young however very mature, handling complex cases, providing nice utilities and trying to unify Linux boot process. A short list of its awesomeness would be:

  • each service is isolated in its own control group, being able to apply limits and avoid children processes to exit their parent’s control (ie: php/perl from cgi-bin exit from their apache tree). Aside from safety, this allows monitoring when a forking service died as all process in its cgroup are gone.
  • socket activation, like inted/xinetd, allows seldom used servers to not add load to boot process yet they still work as expected, like sshd and cupsd for desktop systems.
  • lazy mount of filesystems by means of kernel automount. Similarly to socket activation, this lazy mount avoids adding load to boot process and postpone the actual mount when the system actually need files from such mountpoint.
  • easy to read/write configuration files (units) with ini-like syntax, matching other freedesktop.org projects such as dbus.
  • native support, properly written in C, to various boot tasks such as loading modules, load/save random seed, clean temporary files, setup console fonts and keys, enforcing quota checks, creating required directories with correct permissions and so on.
  • useful helpers such as systemd-kmsg-syslogd that directs /dev/log to /dev/kmsg, that avoids the need of a proper system logger with logrotate on embedded (or desktops that doesn’t need persistent logging).
  • awesome readahead code that uses fanotify (temporarily disabled in 2.6.36) to passively collect read files, even while replaying already collected from previous boot — without stepping on its own toe or major performance hit.
  • proper integration with DBus to provide race-free activation of system services.
  • various agent interfaces to request user intervention, like passwords.
  • proper remote control interface (uses DBus)
  • proper (optional) SELinux and auditd labeling and interaction.

All in all I really like Systemd and I foresee a brilliant future for it, given major distros adopt it officially (Fedora and OpenSuse at least?)

Enlightenment meets BlueZ

In the past weeks ProFUSION coworker Gustavo Padovan was hacking on bluetooth support for Enlightenment ecosystem using the BlueZ stack.

Enlightenment powered and discoverable Bluetooth adaptor.

This module follows my previous ConnMan module and is built upon the same base. Since BlueZ and ConnMan are both developed by almost the same developer group, the DBus APIs are very similar. The current module is quite simple, yet useful and allows pairing devices. The idea is to further extend it to be a full Bluetooth Agent, allowing different authentication and authorization methods, maybe go even further and send files using the OBEX protocol.

Enlightenment powered but hidden Bluetooth adaptor.
Enlightenment popup menu with discovered devices.
Enlightenment bluetooth adapter controls.

The infrastructure is available as ebluez inside e_dbus, so it is easily accessible to all EFL applications. The infrastructure exposes just a handful methods that were required by the module, but it is easily extensible as most methods are similar and the helpers do most of work, just need to specify the method names and convert types.

ProFUSION is also working on oFono support. Stay tuned to see the module João Paulo is cooking, the e_dbus code is already in SVN.

Enlightenment meets ConnMan

I’m proud to present you with my last Enlightenment module: ConnMan!

ConnMan module popup.

For those unfamiliar with ConnMan, it is a solution to configure and manager your network connections. Unlike NetworkManager, it is very simple and fast, specially for users of it’s DBus API. It will manage everything, including DNS proxy to avoid messing with your /etc/resolv.conf. It also handles WiFi, Ethernet, WiMax, Bluetooth and even Cellular connections easily. For developers using it, it is very simple to use and you just need to use the high level “Service” interface.

ConnMan module tooltip

In order to make it more useful, I created econnman inside e_dbus that abstracts the DBus API as a nice C interface that matches it perfectly and optimally, keeping objects in sync with server and emitting Ecore_Event whenever things change.

The module is quite simple, yet useful. As seen in the above screenshots, it will list the current status and service name (if module is bigger than 32px), when you mouse over it will show a fancy popup with more details, including error messages and IPv4 addresses. If you click it, you get a simple popup with the current connected service selected and clicking it will disconnect, while clicking a new one will connect to that one. Services requiring password will automatically ask for it, while those that failed to connect will also re-ask your password.

The module nicely exposes the offline mode feature to turn off radios. It integrates well with E17 mode: whenever you change E17 or ConnMan, they will sync with the other.

There is still work to do, mainly focus on the cellular specific needs and also create static services. And I also plan to have an application to allow managing your services, reorder them (that defines the priority) and even switch technologies that are available.

And more EFL news out there!

Wow! Just after my last week post about companies supporting EFL, we were pleased with two more announcements:

  • Ardy, a tool that brings together EFL and Arduino using Python
  • Free.fr, the second biggest ISP in France opened up the development of their Freebox HD set-top box using Enlightenment Foundation Libraries and Mozilla JavaScript library. This is pretty amazing as it’s the biggest deployment of EFL out there, an uncertain number that ranges from 2 to 3 million devices.

EFL things becoming public…

Hey all,

Yesterday we started to see some announcements of companies backing Enlightenment Foundation Libraries development. Of course, INdT was pioneer in that since it was decided to use it for Canola2. Later on I created my own company and we officially support EFL as GUI alternative (together with Clutter, GTK and Qt), being the first company to do that.

While there are speculations about which company is it, what I can assure you is that this company is serious and is not alone. ProFUSION itself worked on EFL on behalf of various clients and you may expect another press release about a big French internet and telecom company deploying a massive number of units with EFL pre-installed. Not accounting various community driven projects that choose it and E17 as its base platform, such as OpenMoko and OpenInkpot.

Bottom line? While EFL does not get the same amount of marketing and visibility as Qt and GTK counterparts, it is playing fine enough to be considered to ship in dozen million devices in the next year. Why don’t you consider it for your project? Be open minded and try it out ;-)

Evas UV Mapping and WebKit-EFL

One of the most requested feature for Evas was rotation and other transformations. These are no more, Rasterman just did generic UV Mapping support, enabling rotation, perspective, 3d-simulation and more.

As usual he wrote a fast software engine to make this available on non-3d accelerated, next should come OpenGL and OpenGL-ES as some big players in the industry are now funding his work in both software and GL-ES support, as well as ARM NEON optimizations.

As ProFUSION is also being funded to work on WebKit-EFL, I thought I could demo our work using new rotation support, and the result is quite good:

As you can see, there are still bugs… actually this video was first meant to report a bug with mapping code, but raster is already fixing it.

As soon as I have time I’ll try to update EFL for N900 and try out the new expedite tests, they include 3d cubes, coverflow and more. Hopefully by the time OpenGL-ES will be ready and then we can compare software and hardware performance on this amazing hardware.

All in all, this semester is being quite busy for EFL hackers. Fast OpenGL-ES, UV Mapping, WebKit and soon-to-be-release Edje Editor were all done, with much more to come. Stay tuned!

Ecore-GLib main loop integration

It’s done: http://trac.enlightenment.org/e/changeset/42825

This was a often requested feature by friends, ProFUSION clients and people that want to use the large amount of GLib-based libraries with EFL applications.

To avoid impacting each other, the suggested way is to have each main loop in its own thread, communicating these using pipes. This is used by Emotion’s GStreamer plugin, lots of projects inside ProFUSION or for our clients. But sometimes this is not easy to do (Adobe Flash plugin for WebKit-EFL) or maybe we just want to do an experiment until native efl version is available (for example, EUPnP is still in early stages, while GUPnP is rock solid).

This enables (or makes it easier) using nice projects from EFL applications, to name a couple of personal interest:

  • Rygel: Rygel is a collection of DLNA (UPnP AV) services (devices in UPnP speak).
  • GUPnP: object-oriented (GObject) open source framework for creating UPnP devices and control points.
  • PulseAudio: sound server. Although it is possible to write your own main loop support for pulse, it’s much easier to use glib’s until someone writes ecore_pulseaudio.
  • Moblin Mojito: ocial data server which will fetch data from the “social web”, such as your friend’s blog posts and photos, upcoming events, recently played tracks, and pending eBay auctions. It also provides a service to update your status on web services which support it, such as MySpace and Twitter.
  • Google Gadgets: similar to E17 gadman, provides sandboxed widgets. It allows storing basic data and network I/O, so there are forecasts, stock options and rss feeds. It would be nice to have a native port (we’re working on it), but meanwhile using GTK’s infrastructure would help.

Memphis on real hardware: Nokia N810

This is a followup of my previous post, but now running on Nokia Internet Tablet N810 with Maemo. We interleaved it with parts of screen casts so you can note it’s very close to the desktop edition, even animated video thumbnails works fine:

We even managed to convince Mariana to do the initial talk!

Memphis in car entertainment preview

Over the last months ProFUSION worked hard on building Memphis, an in car entertainment system. Now we can finally publish the first preview of it, it is real and runs on couple of hardware we will demo later, including Nokia N810 (OMAP 2420) and Freescale iMX27, iMX31 and iMX35 with displays ranging from 4 to 7 inches, from 640×480 to 800×480.

The product is based on free software Canola2 platform, which we support as well. While some parts of it were made available over these months, including our optimized thumbnailer “Ethumb”, some parts will be available later, under the same license. It’s not an issue as you’re unlikely to get it from Volkswagen and running it BMW, what matter for clients is the product as a whole, not just software interface.

Work done so far is not just a face lift of Canola, it goes deeply in optimizations, platform roots and changes plugins as well. The roadmap includes fast UPnP server and control point, as well as GPS/maps and other car useful services.

Theme is just a demo, we call it “ProFUSION theme” as we use our own colors and font. Clients will get an unique look and feel as well as custom changes, such as integrating with real panel keys, text to speech and voice recognition systems.

Read more at http://profusion.mobi/node/17.

Enlightenment getting ready to rock!

Not 1.0 release yet, but moving towards it!

Last week I started a discussion with some packagers so we could get ride of lots of outdated and unmaintained repositories as well as updating the maintained repositories so they get improvements from SVN HEAD and also help testing our code.

This was interesting, first packagers did not know each other (even various Ubuntu/E17 package maintainers) so the first task was to get them to talk and settle differences.

Then they complained about trunk often being unstable and hard to get a consistent snapshot to package. While this is true, I also complained about their interaction, or lack of, with developers to know how to build and we agreed that having a public schedule with period to stabilize code base followed by development snapshots could help. So I did propose one monthly plan that people liked, being this weekend (Thursday April 16th) the first freeze followed by a development snapshot on Monday.

The result is turning to be better than what I imagined: all packagers are now united and talking to developers, we set up http://packages.enlightenment.org/ to release packages until they go into mainline distros and we increased SVN commits, with lots of motivated people fixing problems here and there, cutting rough edges and making experience better and better. Now let’s hope during this bug fix weekend we manage to get rock solid EFL and E17 so we can release packages to spread use of our technologies.

Having more people to know and test Enlightenment and its technologies is very important. We’re getting our Release Plan done and expect to release E17 and EFL 1.0 this year. Our project got really interesting Google Summer of Code applications covering Netbook, Browser and other areas were we can rock. But we could use more press releases and marketing, people still don’t know that Enlightenment Technologies power products from phones to home automation systems to mobile media centers and even digital tv set-top boxes around the world!

PS: expect Debian/Ubuntu/SuSE packages for Canola, Enna and other nice applications on top of EFL afterwards. Thanks to all developers and packagers to make it happen!