Hacker News new | past | comments | ask | show | jobs | submit login
Enlightenment 0.26 (enlightenment.org)
121 points by pantalaimon on Dec 24, 2023 | hide | past | favorite | 50 comments



Interesting, Samsung’s Tizen OS used Enlightenment/EFL as its native UI framework: https://docs.tizen.org/application/native/tutorials/ui-build...


Some have questioned the wisdom of that decision: https://what.thedailywtf.com/topic/15001/enlightened


IIRC the author of that article really misunderstood what he was working with, for example he mentions that everything in EFL is an Evas_Object but that is only for the Evas library - which is a scene graph (another thing he seemed to misunderstand). In addition using a generic handle for an object is also something common in C APIs that want to hide the implementation details for objects, especially generic ones (one of the most common cases is HWND on Windows).

I haven't used EFL myself to judge its quality (i considered it for a bit but from what i could tell it doesn't seem the main developer(s) considers backwards compatibility important - there is some API revamp which on one hand sounds nice but on the other hand it means anything that uses the existing API will stop working - though i might be wrong here) but from what i could tell the author didn't really knew the API he was working with.


Also, the author does not seem to understand how C callbacks work. Gtk uses the same stuff, hiding them under "signals". Qt had an awful hack to support C++-style callbacks through the MOC preprocessor, which, in the end, were "compiled" into C-style callbacks. AFAIK, after C++11 they moved from this.

> If you can pass a const, you can pass a string literal for example, which will then be de-const’d, so you can modify it at will. Welcome to the land of undefined behavior by design!

The author needed to understand what C is - a weakly typed language that doesn't get in your way. EFL (and Enlightenment) was created and led by Rasterman [1], the guy who knows his craft and doesn't waste his time with type-related theoretical nonsense. I find his code extremely readable and performant, and he has a lot of good resources to learn from.

[1] https://en.wikipedia.org/wiki/Carsten_Haitzler


> Qt had an awful hack to support C++-style callbacks through the MOC preprocessor, which, in the end, were "compiled" into C-style callbacks. AFAIK, after C++11 they moved from this.

Nothing really awful about it. MOC is the MetaObject Compiler, and it's needed to support introspection. In standard C++ you can't just list the methods or properties any random thing has, for instance.

Signals are also pretty complex. At the simplest, yes, they're more or less a C callback. But they can also be queued and sent between threads, and that of course needs special support that Qt does for you behind the scenes.

What changed in newer releases is that signal syntax moved from using strings:

    connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed()));
    // This is pretty much:
    connect(sender, "destroyed(QObject*)", this, "objectDestroyed()");
to references:

    connect(sender, &QObject::destroyed, this, &MyObject::objectDestroyed);
Which means connections are checked at compile time instead of at runtime, and you can also connect signals to functors or lambdas.


They didn't display any misunderstanding of C callbacks. The two complaints I read were: 1. You pass a const pointer in and get a mutable pointer out. 2. The value of one of the parameters was inconsistent.

Both are valid criticisms. The first point is objectively wrong API design.

Let me repeat, it is objectively wrong. C may not have the strongest type system but that doesn't mean that the intended programming model is "completely ignore const correctness".

> knows his craft

Maybe. But there are plenty of programmers who achieve great things while being objectively awful programmers.

The criticisms in this article (assuming they are true) are really unarguable.


Also enlightened (and thus rasterman) had a reputation of non trivial optimizations and low memory footprint which was critical for early smartphones.


Wow that's way worse than I would have expected. Especially those error messages. I imagine bosses could brush off "the API design is completely broken" because they don't have direct experience of it but how do you accept using a library with error messages like "You bitch!"?

I'm genuinely curious how Tizen came to use EFL.

Edit: I looked it up; apparently due to high performance and built in theming support (which tbf I do remember being true of E17 back in the day). They do also note the "unfamiliar developer experience" and lack of documentation and developers. Definitely an odd choice.


I'm not sure about the origin, but for a while, several EFL developers worked directly for Samsung. It was great (as a previous user of Enlightenment) because development was super active.


Enlightenment in general is in my humble opinion one of those things from the FOSS world that deserve much more success and recognition than it has had. It has so much potential.



This article is probably a reason why a lot of people did not pay much attention to EFL but i don't think the author had some misunderstandings about the API (see my other comment here[0]).

[0] https://news.ycombinator.com/item?id=38754289


Could you (or someone) remind me what the big selling points are? I remember a LUG meeting back in the day where someone had fire on the bottom of their screen. But that's about it.


That was kind of the selling point, IMO. Enlightenment was the WM that focused on pure eye candy even at the expense of practicality. You had random graphical effects just because it looks cool, all sorts of overblown themes to emulate hacker movies, and a few actually useful features (like the virtual desktop display showing what windows were present on other virtual desktops)

If you wanted to have a normal, usable desktop there were the typical choices like Gnome, KDE or IceWM. But if you wanted to show off, Enlightenment was hard to beat.

Hilariously, as time went by hardware got so much better that it went from ridiculously wasteful to really lightweight.


> If you wanted to have a normal, usable desktop there were the typical choices like Gnome, KDE or IceWM. But if you wanted to show off, Enlightenment was hard to beat.

Many people say the same thing about Hyprland. I think they don't understand that what you call eyecandy allows important usability feature.

For example, Hyprland has very good animations and optimizations, so I can run all my windows fullscreen, without a titlebar, on several desktops. It's something I did before on Windows, but that was painful on Linux when the "eye candy" wasn't on par.

Moving between desktops is done with just one key. I configure it to take about 200ms (so it's not intrusive) and I mapped it the ろ (ro) key, which is next to the right shift key on my 106 keys keyboard): the visual feedback helps me keep the context.

Doing the same with Gnome was painful: slow, ugly and hard to get right (if working at all)

> Hilariously, as time went by hardware got so much better that it went from ridiculously wasteful to really lightweight.

I don't think it's hilarous but sad because Gnome is both slow, looks ugly and can't be configured


> Many people say the same thing about Hyprland. I think they don't understand that what you call eyecandy allows important usability feature.

Bingo. Mac has had (crude, by today's standards) animations from very early on, because an animation helped convey the idea that e.g. a window opens "from" an icon you've clicked.

You don't need the effects to be fancy, but a tiny bit of animation helps you orient yourself. No naturally occurring object (except lightning) can change as abruptly as the contents of a screen.


There was a time (around 1999-2005 iirc) when Enlightenment’s graphics library Imlib was the tool for fast CPU raster ops, and was adopted by everyone else. Then accelerated graphics (and eventually GPUs) became the focus and the norm, and Imlib was mostly abandoned.


I've run Enlightenment (E) since the 90's. Never had flames or any other BS like that. By default there are some animations (for things like desktop switching), but these are easy to turn off, and I always do.

E maintains separate virtual desktops per physical monitor. This allows you to independently switch between L virtual desktops on monitor 1, M virtual desktops on monitor 2, and N virtual desktops on monitor 3... Once you have tried this, it is really hard accepting the limitations of a single virtual desktop space across all physical monitors.

E supports window shading. In some circumstances, I will minimize applications, in others, shading is nicer (e.g., to keep a window associated with a particular virtual desktop).

It can be run in floating window, or tiling mode.

You can decide if focus raises windows or not. Not raising windows on focus is IMO much nicer than the way most environments operate.

You can turn off all the crap like task bar etc., and have a traditional X environment where clicking the mouse on the root window brings up your menu (my preferred setup), or you can make it look/act like Mac/Windows, if that is your thing. You can do most things with the keyboard (setting up custom key/mouse/edge of screen/etc. bindings is trivial). If you hand edit '.e/e/applications/menu/favorite.menu', you can have submenus etc. in your right-click "favorites" menu (using the gui to add menu entries to "favorites" only supports a flat structure). Left click brings up the default menu. Middle click brings up a list of open windows (separate list per physical monitor) to quickly switch.

E is still lightweight compared to alternatives, but it used to be the case that one of the primary devs would test against an ancient machine to ensure it worked well even on box without much memory, and an ancient processor.

I don't use gui stuff for network, filemanager, etc., but I have heard complaints about the default included stuff for this, but you can always just use something else with E, if you like to use gui for these.

Wayland support is WIP. Not recommended.

If you try the E25 package in Debian Bookworm, there may be a missing dependency in the package. It often abruptly exited without an error when clicking on the root window (which I do a lot of for menus). In frustration, I decided to try to build the Moksha E17 fork, but got errors in the build. I didn't have time to track them down, so just continued using debian's packaged E25. Time passed, and I noticed that I hadn't had a crash (abrupt exit without error) since installing the build dependencies for E/Moksha.

from apt's logs:

libefl-all-dev

(which pulled in: efl-doc gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 libcurl4-openssl-dev libdw-dev libefl-all-dev libeina-bin libeolian-bin libeolian1 libflac-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev liblua5.2-dev liblz4-dev libmpg123-dev libogg-dev libopus-dev liborc-0.4-dev liborc-0.4-dev-bin libout123-0 libreadline-dev libsndfile1-dev libsyn123-0 libsystemd-dev libtool-bin libunwind-dev libvorbis-dev libx11-xcb-dev libxcb-xkb-dev libxkbcommon-x11-dev )

libxcb-shape0-dev libxcb-keysyms1-dev libeet-bin doxygen libpng-dev libluajit-5.1-dev libbullet-dev dbus-x11 libpam0g-dev


Also, to turn off the (damn) sound effects in e25:

install: libelementary-bin

run, elementary_config ->audio settings settings->all -> preferences -> elementary configuration (can change colors, font scaling, turn off sound effects, etc.)


> By default there are some animations (for things like desktop switching), but these are easy to turn off, and I always do.

Why?

> It can be run in floating window, or tiling mode. > Wayland support is WIP. Not recommended.

What you describe looks to me like Hyprland. You should try it if you want to keep the same workflow on wayland!

> clicking the mouse on the root window brings up your menu (my preferred setup),

This seems slow. I have the windows key mapped to drun, to open floating menus. You can run many floating menus, with type ahead (like fzf or fzy)

> You can turn off all the crap like task bar etc

Same on hyprland, but a good taskbar is one that doesn't go against your workflow but with it: mine is very thin and mostly shows the virtual desktop, if the screensaver is forcefully disabled, the name and signal of the network, the volume, temperature, free ram, cpu, battery charge.

It can be toggled off with a shortcut. There's no need to list the individual running apps if each one has its own desktop and run in fullscreen mode.

Likewise, no need to waste space on titlebars if the title can go in the taskbar.


The theming was the main feature. It was like winamp for your entire computer. The other thing that was rather remarkable was how fast it was despite all the bling. After the initial novelty wore off, I used it with toned-down themes for quite a while simply because of how responsive it was.


In general, I agree, and like using it. But, it's lagged quite a bit regarding Wayland, and still uses some strange components under the hood (acpid instead of logind, connman instead of network manager, etc). I hope it becomes a bit "modernized," where it makes sense.


Connman is okay, it's less featureful than network manager but it's easy to use. I think some Kodi distributions use it, and also available in Debian. Connman, NM and systemd-networkd all strike a different balance (simplicity, server usage, client usage—pick two).


The first time I got e running was a magical moment. I'd sit there in awe at the responsiveness, and I'd wait for the just the "right" moment to sneak up on xeyes and catch it slipping but it always found my cursor... It sounds dumb now that I type it out, in retrospect.


Don't be so hard on yourself, we all have interesting misunderstandings about new tech.

Back in the day, late 96 I think with Slackware: I had been using the SunOS and Solaris boxes at work, and a senior engineer told me I should check out Linux, it's Unix on a PC! So, armed with a setup CD, I got it installed and started using it. I thought, this is a very new user unfriendly system, each time I make a mistake, it says it wants to hit me!

    bash: syntax error near unexpected token...
I thought "bash" was the system insulting and mock threatening me for messing up. :D


Is this one of the oldest WMs still in development for Unices? I remember I ran Enlightenment on my Pentium 133 MHz Linux box to get those cool aliens hanging from my windows. Feels like the version numbering isn't much different from those good old days. What is the rationale for running Enlightenment today, compared to, say, a DE like Xfce?


TWM (87) and FVWM (93) are still maintained today.


Don't forget CDE (93) and XFWM (96), still getting releases.


Xfwm has been rewritten from scratch at least 2 times. I can't imagine there is any code left from the original releases. Plus it used to be a CDE clone and that was dropped around version 2 when it became a light Gnome clone.


Window Maker was also first released in 1997.


Cool aliens? Is this a reference to the Alien 5/Alien 17 theme?


I don't remember what it was called, but yeah, something along these lines. It really looked cool.


It’s been probably a decade since I last tried it, but Enlightenment is interesting and somewhat quirky… definitely a change of pace from the usual suspects. Might have to try it again just to see how it’s changed.


How is the Wayland support these days? Wondering if there is an alternative to Sway, other than gnome.


Not awful, but not great. I believe multi-monitor support isn't there, and some issues with layers (Firefox can't run natively, for example, but requires xwayland).


I can't get multimonitor support in sway or gnome wayland with nouveau, can others? Just want to plug a hdmi into my Arch Linux laptop.



I know, I'm asking how it has progressed.


I once E because the cool kids on IRC were telling me all about it.. over 20 years ago! I think that was E16 and quickly checking, it is still supported! This is older than windows XP!


The types of people that were into Enlightenment back in the day are now into Hyprland.


I remember the previous version of Enlightenment (E16?) and, from a design standpoint, it was really cool and productive for the small resolution CRTs of old.

The current version doesn't give me those vibes. And I haven't checked out the code of either, so I'm unaware if it's something atrocious :)


I absolutely loved e16 way back when. Really great to see this project still going.


The linked project is a rewrite; originally called E17, but the version number has been increasing, and is now up to 26.

However, E16 is actually still maintained! https://www.enlightenment.org/e16


Wow that's amazing. I know what I'm doing over the break!


Wow! I think I first used this wm 25 years ago and they are still not even close to 1.0. Does anyone know what version number scheme they are using? Is it actually +0.01 per year, or is that just a happy coincidence?


Getting closer to 1.0!


Not if they follow https://0ver.org/

E is wrongly listed as 11 years in version 0, shouldn't it be 26 years?


E16 hit 1.0 in 2009 (and is still maintained), disqualifying that older code for 0ver.

E17 was released in 2012 and as a major rewrite it is considered a separate project.


Shout out to the folks who used to hang out in the Enlightenment IRC channel until we all got told to take the social stuff to a new channel :D


e16 is the best Enlightenment imho. and yes its true, Rasterman is still a script kiddie! i still prefer windowmaker as my daily driver dispute it not being a fancy compositing window manager. maybe i will experiment adding my own compositor to wm one of these days




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: