Way Cooler in 2017 and beyond

2017 Recap

2017 was a big year for Way Cooler. Version 0.7.0 was just released and altogether we’ve had 3 major releases, with 6 minor releases spread out amongst them. Some of the big features from this year include:

Though that doesn’t cover all of what was accomplished, that list alone shows Way Cooler has accomplished a lot this year.

I want to take this moment to thank all the new contributors to Way Cooler who were a great help, with specific thanks to @alexander-smoktal (for his continued work on wlroots-rs, the next phase of Way Cooler) and @Arnaz87 (for improving the look and feel of the borders tremendously).

Way Cooler has obtained over 1,200 stars on Github, and, as Phoronix mentioned in a recent article, it is still steadily growing as an alternative compositor despite a low contributor count and an unclear goal on what Way Cooler is actually trying to achieve.

Well today I’m going to fix at least one of those problems.

Way Cooler in 2018

Whenever I’ve pitched Way Cooler I’ve always used a simple formula to describe it:

Way Cooler = Awesome + i3

As Sway has grown however it’s obvious that the i3 niche in the Wayland world has been more than filled. Sway functions as an excellent clone to i3, leaving most of the feature set of Way Cooler to be comparatively lacking.

In today’s world Way Cooler is a psuedo-i3 clone, with only the Lua integration and benefits of Rust to differentiate it from the competition. This leaves both camps disappointed, as users of i3 will just use Sway and users of Awesome will just keep using Awesome.

So I’ve decided to simplify the formula:

Way Cooler = Awesome + i3

For those that have been following discussion on the gitter channel or following the issue tracker closely this probably comes as no surprise. But I want to take this opportunity to declare 2018 as the “The Year of Awesome”.

2018: The Year of Awesome

The goal of 2018 is for Way Cooler to be a fully compatible AwesomeWM clone.

To achieve this goal you must, by the end of 2018, be able to drop in not only the default Awesome rc.lua file but also any custom made Awesome user configuration setup and it should just work.

I fully expect to not hit the entirety of this goal in 2018 alone. If you look at the contributor graph of Way Cooler I’m still the biggest writer of the code by far, and I have more things in my life outside Way Cooler demanding my attention more than ever before.

For anyone who is interested, now is a great time to get involved. The work that this will require is almost entirely greenfield, I’ll essentially be rewriting a compositor from scratch using an entirely new compositor framework and writing code for a well defined and battle tested Lua API.

If you want to get involved, or just understand what technical challenges lay ahead for me, read on…

A New Compositor Framework Emerges

wlc, the compositor framework currently in use by both Sway and Way Cooler, has been deprecated. The original creator has stopped working on it long ago and it’s very unlikely to continue to receive any updates past its current 0.10.0 status. To learn more about why WLC is being abandoned, see this thread.

The two official successors to wlc that spawned from that discussion are Smithay and wlroots.

Smithay is still very early in development, with it only just recently having its 0.1 release. They’ve done tremendous work, but there’s still a lot that needs to be done before they are ready to be used in production.

wlroots, meanwhile, is nearly complete. Their example compositor, rootson, works as a (basic) daily driver and the developers of Sway are actively working on the porting process.

I have decided to use wlroots, for reasons you can read about in the wlc deprecation discussion. Unlike Smithay, wlroots is written in C just like wlc. Unlike wlc, it’s much more complicated. This means the simple act of making safe wrappers for wlroots is going to be very difficult. wlc took several months to wrap last time, and while I have better knowledge and tools to tackle it this time it’s still going to be very difficult without sacrificing the benefits of Rust to the altar of practicality.

Work on wlroots-rs, the Rust bindings for wlroots, has already begun. Now that the API has mostly stabilized, this is where I’ll be diverting the majority of my efforts for the foreseeable future. To get involved, take a look at the issue tracker and ask questions in the Way Cooler gitter channel.

wlroots-rs will be complete when we have created a 1-1 replica of wlroot’s rootson in 100% safe Rust.

Making Way Cooler Awesome

Once wlroots-rs is complete the “real” work begins. Porting over existing Way Cooler code is something that could be done, but would mostly be useless since the majority of the code will be thrown out once the AwesomeWM transition is complete.

What will probably happen instead is that a fresh new compositor will be created. This new compositor has way less requirements: it is only expected to run a Lua thread. No tiling, no D-Bus interfaces, just Lua. It will still be much more complicated than current Way Cooler though, since wlroots gives us more control by stripping away the layers of abstraction that wlc has previously provided for us.

However, work can still be done on Awesome compatibility, even while others are working on wlroots-rs! We have an rc.lua in the current Way Cooler codebase that can actually be loaded and ran today with no errors! It achieves this by implementing the barest interface that does absolutely nothing.

It’s entirely possible to get AwesomeWM compatibility working before wlroot-rs is complete. If you’re interested, check out this issue list, this part of the code where the changes will be made, and finally you can always ask questions on our gitter channel.