Taking the other direction
Par jd le mercredi, avril 15 2009, 19:40 - awesome - Lien permanent
I've started to develop awesome more than 18 months ago, and somehow I feel it's time to stop a bit and think where we come from and where we are going to.
The motivation
I never though I'd be written a window manager one day. That seems kinda stupid when you see how many window manager there's around.
As many people, I've tested and have been using tons of window manager: Window Maker, Fluxbox, etc.
In August 2007, I was using fvwm since 2004 and was quite happy with it. I used the famous fvwm crystal as a configuration starter and then rewrote lots of stuff. Digging into fvwm configuration files was boring, and since I'm lazy, I never really configured it to fit entirely my needs.
The thing is that, in July 2007, my workstation died. I bought a new one based on the amd64 architecture. Too bad, with this new box, fvwm decided that it will not longer runs and was segfaulting almost every time I logged in.
I was really upset. Another failure in the window manager world. So I decided to get the yearly ride of testing many window managers. I went on the no more developed stuff like the *boxes, ion3, etc… but well, I did not like them, there were not powerful enough, too bugged or upstream was insane.
Then I found xmonad. The Haskell configuration file format made my cry. I did not want to learn Haskell, it seemed too obfuscated to me. At that time it was even not packaged for Debian, so I gave up. But I found dwm in the meantime, and I loved it. It was simple, and the source code was almost understandable and easy to hack.
I subscribed to the dwm mailing-list, in order to participate to its development, etc… But I got really disappointed. No patch were welcome and the development seemed to be almost finish in this sight. People patches were lying around, but no one really care. Each user was managing its own set of patches.
That's not what I learnt and what I love in free software. So, as many users, I began to maintain my patches in my corner. But I began to have more ideas…
The jdwm
I just added a 'j' in front of dwm and started to hack it days and nights to add many feature I missed, like multi-head, etc… On 5th September 2007, I created a git repository to host my code.
That's gonna be… awesome.
Five days later, on 10th September, I finally found a name for my new pet: awesome, borrowed from Barney Stinson who heavily uses and abuses this word.
The 1.x branch
The first releases until December were noted 1.x. It was just a better dwm with a simple flat configuration file.. The configuration file used libconfig, but it was a very poor choice. And I was not able to put in into Debian because of name clash.
The 2.x branch
The 2.x branch came in January 2008 with a brand new configuration file format based on libconfuse, which was a bit more powerful. Many concepts and features that have been added in this branch are still used in the current 3.x branch.
At this time, between December 2007 and April 2008, the community was growing smoothly.
But as I said, awesome 2 was based on a flat configuration file. That raised a problem very soon: users expectation were growing and the development team (me and a couple of regular contributors) was unable to cope with them.
One of the event that started to change my mind was the support for titlebars.
When I've added titlebar support, it was minimal. It was on top of a window, with the window title. Dot. Then I've started to add a lot of options, like the application icon drawing, the position (left, right, bottom) etc.
And then users started to ask for more, like: "add titlebar on windows only when the window is floating".
That's ok, but that's complicated: that's again another option to do some stuff conditionally. And then, why don't add titlebar on windows when <insert random events here>?
The 3.x branch
Why
At that time, around April 2008, I'd totally stopped development. I was trying to find a solution which was simple and powerful. But after 2 weeks of thinking, I was not able to find anything else than: use a real language for configuration.
So, I've started prototyping awesome 3 using Lua. The choice was not obvious, and despite the problem Lua might suffer, it's one of the easiest language to integrate into an existing application. There's still a video of a first version here.
But, let's go a little back: in January 2008, Arnaud Fontaine contacted me because he was interested to use awesome as one of its school project. He decided to port awesome from Xlib to XCB, a modern asynchronous X library.
His work took some time, but in May 2008, Arnaud did finished to port git master version of awesome to use XCB.
Consequently, I decided to start a new major branch, using XCB instead of Xlib (no change for users in this regard) and Lua instead of our previous flat configuration file format.
Development
It took me a while to get from here to there, but in September 2008, it was ready. We had a simple Lua API, and the XCB port was working perfectly.
It took us some time to release and have something totally working, because we had to work on XCB and contribute back to the project. It was really not ready to use by an application, but we did great work in this area and it's now really fine.
We're still here
Releases continue to happens, 3.1 around December 2008, and 3.2 around March 2009. 3.3 should be here in June.
One of the drawback we had, is that we moved many stuff from C to Lua. Why? Because writing things in Lua is quicker and easier to maintain than C, and makes thing more configurable for the user.
For example, the layout algorithm used to organize window were written in C until 3.2 came out. At that time, users had no choice than using a set of predefined layout to organize their windows.
Starting with 3.2, if they have minimal knowledge about geometry, they can start writing a layout function organising windows on the screen.
But this kind of API changes was a bit rough for users, since they had to port some part of their configuration file to the new API. The thing is that the project was still a teenager at that time, not really knowing were it will go. But I'm happy to announce that API breakage are more and more rare (so far only one minor between 3.2 and 3.3), and anyway always for the Good.
But I admit that it built a bad reputation around awesome 3.x during its first month of existence.
Future direction
I am currently working on 3.3 development. We have still many things to do. Time passing, we get more idea, and more users. And more users bring more ideas. We also have many more contributors, and some guys are even taking maintainer-ship of some code area.
Conclusion
My post title is "Taking the other direction" because I feel this way.
I've got that feeling that some approaches in projects like GNOME are sometimes bad. Please don't misread me, I know we are not playing in the same yard.
When adding a key shortcut for starting an application makes you dig into gconf, I wonder how this is a win for the user.
Well, it's probably a win for the end-user, but I surely am not one of them. And I don't intend to target them with my software, anyway.
And now, when I hear things like GNOME 3.0 and the "desktop shell" approach, that makes me smile. Guys, it was time, but have luck. What I see from here, is that any desktop control interface is wrong somehow, and that there's no approach that can fulfill all users wishes.
I think that we, the awesome development team (no pun intended) took the direction of building a frame-work window manager rather than a solution written in marble.
We (partially) solved the issue of UI ergonomic by not writing one and allowing the user to write his own. I don't say that's easy to do for most of users, but it's doable.
And I think it's worth it: I use window managers since I use Linux, around 1998. If something like awesome came 5 years ago, I'd be using it so far, because you can write Fluxbox or WindowMaker using awesome in a hundred of Lua code. And you can write your own version of it. And it starts in less than 3 seconds, supporting almost all standard desktop specification (ICCCM, EWMH, XDG, system tray, message notification, D-Bus, etc), whereas many of the window mangers do not.
You can even write and play space invaders.
Finally, I'm happy about the the road we took so far, and hope we will continue into that direction. The rants I read about our project are not that big, compared to the kudos we received.
Commentaires
I can only say two words here:
full ACK
Especially since some of the ideas (i.e. "framework" wm, i guess that was first mentioned on irc three or four months ago) have floated through the air for some time it's good to see them carved in silicon. Also I like the target of "no more serious api breaks", though I guess there will be one occasion where that rule has to be broken :P
A while back I've tested awesome but it didn't really fit my working style and I didn't feel like playing constructor for my work environment. I went away from it, although I liked it more then less. A few days ago I really wanted to integrate it into a desktop environment. Make it fit my working style. It didn't work out as expected as I quickly got frustrated with the missing documentation, the mostly outdated examples and the seemingly arrogant attitude seen from your sentences on the awesome wiki. So I came to xmonad, which really is my second choice, because after all I share your antipathy against Haskell. But it had what awesome is missing: Documentation, a friendly receipt for people not used to learning programming languages to configure their window manager and examples that actually work with the current version of xmonad. I really hope that at some point in time awesome becomes to this point. Because after all I like it.
Compared to MS Windows, most of the Linux wm are superior. But, awesome is the one that I really, really love. Not just like, love. It is nearly perfect. Thank you very much. It is fantastic.
I am also happy to see the config api settle down, though. It was a bit of work for a while.
I recently discovered shifty, and it would great to see that continue to get more support.
Patrick, I'm deeply sorry you got such a bad experience.
I invite you to join the user mailing list and ask question. I never saw anyone badly handled on this list so far.
And we would be happy to help you out, and fix the missing documentation in the process if that can be achieved.
very much agreed.
I jumped of the Apple ship in November 2008 for the awesome/linux world, largely because of awesome, and I've been quite impressed with the software and it's affect on my usage.
I think your comment about "solving the UI problem by not having one," is quite true and perceptive...
Thanks for awesome
My wm experience : Kde -> GNOME -> XFCE -> awesome !
My little suggest is keeping it as simple and light/fast as now!!
Julien, thanks for the invitation. Currently I'll stick with my setup for a while, because it actually works for me. But I often re-evaluate my working style, so most likely I'll revisit awesome in a while. A stable API is obvious a step in the right direction
Yeah, it sounds very nice, and I have friends that use and love awesome, but I'm a Fedora user and I just can't build it
Also there are no Fedora packages, probably because of you choice of dependencies...
How is it that such a major distribution is not supported? My guess is the awm microcosm is not that big. Mostly debian users maybe?
-- package 'xcb-event>=0.3.4' not found
-- package 'xcb-keysyms>=0.3.4' not found
-- package 'cairo-xcb' not found
-- package 'libstartup-notification-1.0>=0.10' not found
-- package 'imlib2' not found
-- package 'libxdg-basedir' not found
No, there's also many Arch users.
The problem in Fedora as far as I am aware of, is that the Cairo maintainer does not want to build the XCB backend because it is considered as experimental.
Even if it's experimental, thousands of awesome users are using it for more than one year without any problem, so it's just a problem of person in Fedora unfortunately.
Michal Nowak has done most of the work porting awesome tu Fedora, since he prepared packaged of everything for the distribution, but got stuck in front of your Cairo maintainer AFAIK.
First, thanks for awesome.
The default config makes a very usable and well designed wm and the idea of having a framework for writing your own wm in a few hundred lines is just ...wait for it... awesome. 
But we really need more and better documentation. I understand that developers have better things to do than writing documentation, after all coding is just more fun. But at the moment it is really difficult for beginners to start editing the default config, particularly if your lazy, and I think most people who want to use awesome are, since awesome really tries to make your workflow efficient.
So the community should really start to write a decent and structured user manual, which is better than the cluttered wiki. The manpages are a good start, but at the moment when you want to edit the config file you need to read a lot of example config files, search in the mailing archive etc...
Of courcse for power users which are the audience of awesome this is totally possible, but a barrier and again most users are just too lazy.
PS: For me the controles of the blog are in french, which make using it somewhat hard. Unfortunately I never liked french in school and school was too long ago, anyway.
Patrick, you are right about documentation. The code is very well documented almost everywhere, but we lack a good tutorial.
Unfortunately, we lack man power in this regard. I hope this will change in the future.
PS: Sorry, I'd like to migrate this bog to ikiwiki but don't have time to.
i went through a lot of WMs too (some of them pretty ancient now): wmaker, fluxbox, openbox, sawfish, kahakai, compiz. all of them suck this way or another, kahakai (python scriptable wm by hyriand)
never tried any tiling-wms before and then i tried awesome, and now i even have my wm do my git work for me :D
http://silenceisdefeat.com/~koniu/g...
once again, i will argue that awesome's motto should be changed from 'legendary' to 'where WMs go when they die', or maybe i'll use that for shifty :P
"...because you can write Fluxbox or WindowMaker using awesome in a hundred of Lua code."
I was a ratpoison user for some time and really like it being "modal" but it suffers some limitation. Thanks to awesome capabilities, I was able to write a config which mimic ratpoison behavior. Now I'm a happy user of an awesome "modal" modern wm
Donc merci et continuez comme ça.
Kudos again then
I've been user of almost every window manager out there in the last 5 years or so.
2 years ago started my path to enlightenment: ion3. Then xmonad, which was far easier to use, configure and understand. And now awesome... which is even easier than xmonad and has much more extras and candy (task bar, systray, proper mouse support, etc).
The downside: now every other window manager feels annoying and uncomfortable.
Since I read several posts here demanding a good documentation for Awesome, I might as well restate the following here (after I mentioned it a few times on IRC): When my final exams are done (which is in about a month from now), I'll start writing a manual for Awesome which will introduce novice users to our train of thought. If anyone would like to help me, drop me a line on the mailing list, on IRC or via email