Monday, June 17, 2019

Some Thoughts About GNUstep

Since 2004, when as a high school junior I was first exposed to Unix-based operating systems such as Linux and Mac OS X, I've been interested in GNUstep.  GNUstep is a free, open source implementation of the OpenStep API from NeXT, which later evolved into the Cocoa API, which is used for the creation of macOS applications.  Over the years, GNUstep's mission has evolved to striving to keep up with the additions made to Cocoa in each passing version of macOS.  However, as of this time of writing, GNUstep only guarantees compatibility with up to Mac OS X 10.4 Tiger, which was released 11 years ago; the current version of macOS is macOS 10.14 Mojave, with macOS 10.15 Catalina coming out later this year.

Since GNUstep's conception in the mid-1990s, many people have envisioned a Linux desktop environment powered by GNUstep, whether that be a faithful modern-day workalike of either NeXTSTEP or macOS, or perhaps a completely different desktop environment such as Étoilé, which has its own design and UI guidelines.  However, as of 2019, this vision still remains a dream, with GTK+-based desktops such as GNOME, Mint, and Cinnamon being dominant among Linux desktop users, as well as the original Linux desktop environment: Qt-based KDE.  Some people, including myself, have lamented the fact that GNUstep's progress has been slow relative to these more popular desktops.

This is my opinion, but I believe the following are the reasons why KDE and GNOME ended up taking off while GNUstep's development has been relatively slow for the past two decades:

  1. KDE was announced in 1996 during GNUstep's infancy.  Out of all of the GUI toolkits that were available for free, open source software developers for Linux in 1996, Qt was the only one available that satisfied Matthias Ettrich's needs.  Work ended up starting on KDE, and according to Wikipedia, KDE 1.0 was released in July 1998.  Unfortunately, Qt's license at the time was incompatible with the GNU General Public License, one of the major licenses used by many free, open source software projects.  While many Linux users did not find this objectionable, other Linux users felt otherwise, which ultimately led to the announcement of the GNOME desktop project in August 1997, which was based on the GTK+ toolkit, which was based on The GIMP image editing application and which released its first stable version in April 1998.  GNOME would eventually release its first version of its desktop environment in March 1999.  However, while all of this was taking place, GNUstep was still not finished with implementing the original OpenStep API.  Had GNUstep been ready in 1996 or 1997, there's a strong likelihood that someone like Matthias Ettrich would have built a desktop around it.
  2. Cocoa is a moving target, with changes being made to the API once every year or two on average.  Unfortunately, GNUstep does not have the personnel needed to keep pace with Apple's changes, similar to how the Wine and ReactOS projects are perennially behind Microsoft Windows or how long it took Haiku, a clone of BeOS made by volunteers, to reach beta status (and BeOS has been dead for nearly 20 years!).  My understanding is that GNUstep has been developed entirely by volunteers throughout its history.  By comparison, the GNOME desktop has a long history of corporate backing, and the aformentioned Qt framework used by KDE is commercially developed.  Unfortunately, the fact that GNUstep is over a decade behind macOS in terms of compatibility with Cocoa deters developers who want to use modern, up-to-date GUI frameworks.
  3. GNUstep, being based on OpenStep, is an Objective-C framework, while GTK+ is based on C and KDE is based on C++.  When the GNUstep project started, Objective-C was considered a niche language, and even to this day Objective-C is mostly used by developers of NeXT/Apple platforms.  The pool of Objective-C developers is considerably smaller than those of C and C++ developers.  Plus, with the increased importance of the Swift programming language, there's a chance that Apple may deprecate Objective-C in favor of Swift in the future, further reducing the pool of Objective-C developers.
Even with the challenges that GNUstep faces, I'm still holding out hope that GNUstep will increase in popularity and that GNUstep will one day reach API compatibility with newer versions of macOS, which would make the framework more attractive to developers.  I also hope that the Étoilé project will get restarted in order to bring a modern GNUstep-based desktop to Linux.  Given the increased discontent that some macOS users have over the state of their platform, it would be nice if there were a similar alternative available based on GNUstep.

3 comments:

  1. I am the maintainer of GNUstep. I think this is one of the best posts I've seen about the current state of GNUstep. So, to give you an update, I am hard at work getting Foundation / gnustep-base up to date with Cocoa. I am only a few classes short at this point. Once I am done with that I will start work on the AppKit / GUI portion of things. I will post on twitter to update everyone on my status as far as what I am working on and I hope this encourages people to start participating more. If I can single handedly bring base/Foundation into line with Cocoa then imagine what a bigger team could accomplish.

    ReplyDelete
  2. Yet another update. So Foundation/gnustep-base is pretty much up to date. I am working on getting AppKit/gnustep-gui to the same level. With any luck I should be done soon. I just finished implementation of some key classes. Come take a look. :)

    ReplyDelete
    Replies
    1. This is wonderful news, and thank you for commenting on my blog! I'm looking forward to trying this out soon! I periodically search for "GNUstep" on Twitter to find out what the latest news is. I still believe that GNUstep has the potential to become more popular, and I think that the coming days of Qt 6 and GTK 4 will be an opportunity for developers to take another critical look at the landscape of GUI frameworks.

      Delete