There’s a cool project called “GNUstep Desktop” that brings together many old GNUstep technologies, and a few new ones, to provide an entire integrated desktop. We gave it a whirl and are pretty impressed!
It’s pretty amazing that software that began life 30 years ago is still operational and evolving, but that is the case in the GNUstep project.
At McLaren labs, we have been a fan of modern ObjC on clang, and the ObjC runtime with Foundation libraries and have been slowly learning more about GNUstep GUI and desktop. To be honest, it has been a slow learning process. While there is actually very good information about the various pieces of the GNUstep project, it sometimes seems that there are too many conflicting versions around — there isn’t a single source of truth that brings everything together. But that being said, the quality of many of the components really amazes me.
Also confusing are the preponderance of things that seem related: “GNUstep Desktop”, “Nextspace”, “GWorkspace” and “WindowMaker” to name a few. For someone trying to figure it all out, it’s very complicated!
That’s where “GNUstep Desktop” comes it. It’s a single project that pulls everything together to give you a complete GNUstep enviroment, with desktop, development tools, a browser, some productivity tools and utilities.
Read the docs here:
https://onflapp.github.io/gs-desktop/index.html
And see the code here:
https://github.com/onflapp/gs-desktop
Experience
The instructions are very clear about how to build on Debian 10 or Debian 11. OnFlapp has done a nice job gathering all of the dependencies. We created a VirtualBox with Debian11, followed the instructions, and built the entire thing in less than 30 minutes.
Really nice is the way that it integrates with X11 and /usr/share/xsessions
entry for login and logout. It is possible to log into different desktop environments, and GNUstep Desktop is just one of them. Read the instructions on how to do this. It works really well.
There is a web-browser wrapped in GNUstep desktop widgets, a mail reader and some other utilities.
It took us a while to get used to the NeXT-like menus, but they worked very well with the window manager. In our prior experiences trying out GNUstep apps in a GNOME environment, things didn’t work so well, even though they ran. In this environment, the entire experience operated smoothly and consistently.
Development Environment
It’s pretty cool that “Project Center” and “Gorm” are included by default. I had tried these out before on a Ubuntu distribution with GNOME and had problems. Here, they worked well.
Project Center can create the shell of an empty project from which you can begin to develop. Gorm is a graphical UI builder with drag-n-drop functionality for placing buttons and widgets on a window.
The look is somewhat old-fashioned, but the functionality is all there. We experimented with creating an outline view application where a user could create nested notes with a “Data Source”, and it all “just worked.” If you love developing in Cocoa, you’ll find that most of it has been implemented in GNUstep.
Scripting with StepTalk
One of the VERY cool things about this environment is the inclusion of the “StepTalk” interpreter. StepTalk is a Smalltalk-based language that uses the ObjC runtime. It can be embedded within applications and can also be used to script across applications.
This is a very powerful feature. You can create scripts to automate actions in the supplied applications. We wrote a little script to open a browser window, and it simply “just worked.”
It’s easy to see how this powerful feature might be abused too. A malignant script could take over your applications and do something nefarious. So we’ll be careful with the scripts we open.
Some Questions
All of the favorable experiences I’ve had with this project have just led me to wonder about a few things. One of the projects that GS-desktop leverages is called “Nextspace.”
https://github.com/trunkmaster/nextspace
Is this being maintained? Is it part of GNUstep? And if not, why not? It’s really good. That project contributes integration with PulseAudio for sounds in a framework called “SoundKit”. Who else is using SoundKit?
Summary
If nothing else, playing with this project has brought me some joy, and allowed me to try out some Cocoa programming on a tiny demo. I’m not sure I want to use Gorm for UI development, but I am very impressed with the Makefile build environment, and the widget library seems robust. It’s small too: so compilations run quickly — It makes me want to write some tools and contribute something to the GS-universe.