GNUstep

Open source widget toolkit and application development tools

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "GNUstep" – news · newspapers · books · scholar · JSTOR (January 2010) (Learn how and when to remove this template message)

|

This article is in list format but may read better as prose. You can help by converting this article, if appropriate. Editing help is available. (January 2012)

|

This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources.
Find sources: "GNUstep" – news · newspapers · books · scholar · JSTOR (February 2011) (Learn how and when to remove this template message)

|

(Learn how and when to remove this template message)

GNUstep

GNUstep screenshot, showing Window Maker and a variety of applications developed with the GNUstep libraries, including a gomoku game, calculator, and TextEdit.[1]

Developer(s)| GNUstep Developers
Stable release|

make 2.9.0, base 1.28.0, gui 0.29.0, back 0.29.0 / May 6, 2021; 2 years ago (2021-05-06)

Preview release|

only in the SVN software repository

Repository|

* github.com/gnustep

Written in| Objective-C
Operating system| Cross-platform
Type| Widget toolkit
License| GNU General Public License for the applications
GNU Lesser General Public License for the libraries.
Website| gnustep.github.io

GNUstep is a free software implementation of the Cocoa (formerly OpenStep) Objective-C frameworks, widget toolkit, and application development tools for Unix-like operating systems and Microsoft Windows. It is part of the GNU Project.

GNUstep features a cross-platform, object-oriented IDE. Apart from the default Objective-C interface, GNUstep also has bindings for Java, Ruby,[2] GNU Guile and Scheme.[3] The GNUstep developers track some additions to Apple's Cocoa to remain compatible. The roots of the GNUstep application interface are the same as the roots of Cocoa: NeXTSTEP and OpenStep. GNUstep thus predates Cocoa, which emerged when Apple acquired NeXT's technology and incorporated it into the development of the original Mac OS X, while GNUstep was initially an effort by GNU developers to replicate the technically ambitious NeXTSTEP's programmer-friendly features.

## History[edit]

GNUstep began when Paul Kunz and others at Stanford Linear Accelerator Center wanted to port HippoDraw from NeXTSTEP to another platform. Instead of rewriting HippoDraw from scratch and reusing only the application design, they decided to rewrite the NeXTSTEP object layer on which the application depended. This was the first version of libobjcX. It enabled them to port HippoDraw to Unix systems running the X Window System without changing a single line of their application source. After the OpenStep specification was released to the public in 1994, they decided to write a new objcX which would adhere to the new APIs. The software would become known as "GNUstep".[4]

## Software architecture[edit]

Illustrates software components of the Linux desktop stack like the display server, graphics control element libraries or graphical shells.

### Rendering[edit]

GNUstep contains a set of graphical control elements written in the Objective-C programming language.

The graphical user interface (GUI) of GNUMail is composed of graphics control elements. GNUMail has to interact with the windowing system, e.g. X11 or Wayland, and its graphical user interface has to be rendered. GNUstep's backend provides a small set of functions used by the user interface library to interface to the actual windowing system. It also has a rendering engine which emulates common Postscript functions. The package gnustep-back provides the following backends:

* cairo – default backend using the Cairo 2D graphics library.
* winlib – default backend on Microsoft Windows systems. Cairo and Windows API variants.
* art – old (deprecated) backend on unix-like systems. Uses the vector-based PostScript-like 2D graphics library Libart.
* xlib – old (deprecated) X11 backend.

### Paradigms[edit]

GNUstep inherits some design principles proposed in OPENSTEP (GNUstep predates Cocoa, but Cocoa is based on OPENSTEP) as well as the Objective-C language.

* Model–view–controller paradigm
* Target–action
* Drag-and-drop
* Delegation
* Message forwarding (through NSInvocation)

### Other interfaces[edit]

In addition to the Objective-C interface, some small projects under the GNUstep umbrella implement other APIs from Apple:

* The Boron library aims to implement the Carbon API. It is very incomplete.[5]
* The CoreBase library is designed to be compatible with Core Foundation. It is not complete enough for the Base (Foundation Kit) component to simply be a wrapper around it.[6]
* The QuartzCore library implements Core Animation APIs.[7] The Opal library implements Quartz 2D.

As of February 2020[update], there are no projects that build the Swift programming language against the GNUstep Objective-C environment.

## Applications[edit]

Here are some examples of applications written for or ported to GNUstep.[8]

See also: Category:Software that uses GNUstep

### Written from scratch[edit]

* Addresses, an address/contacts manager
* Étoilé, a desktop environment
* GNUMail, an e-mail client
* GNUstep Database Library 2, an Enterprise Objects Framework clone
* GNUstepWeb, an application server compatible with WebObjects 4.x
* Gorm, a user interface builder application, and part of the developer tools of GNUstep. Gorm is the equivalent of Interface Builder that was originally found on NeXTSTEP, then OPENSTEP, and finally on Mac OS X. It supports the old .nib files as well as its own .gorm file format.
* GWorkspace, a workspace and file manager
* Grr, an RSS feed reader
* Oolite, a clone of Elite, a space simulation game with trading components
* PRICE, imaging application
* ProjectCenter, the Project Builder or Xcode equivalent.
* TalkSoup, an IRC client
* Terminal
* Zipper, a file archiver tool

### Ported from NeXTSTEP, OPENSTEP, or macOS[edit]

* Adun
* BioCocoa
* Chess
* Cenon
* DoomEd
* EdenMath
* Eggplant
* Emacs
* Fortunate
* Gomoku
* NeXTGO
* PikoPixel
* TextEdit
* TimeMon

### Forks of GNUstep[edit]

* Universal Windows Platform, which includes a WinObjC suite consisting of various parts of GNUstep and Microsoft's own implementations of things like the Cocoa Touch API.[9]

## Class capabilities[edit]

### Foundation Kit[edit]

The Foundation Kit provides basic classes such as wrapper classes and data structure classes.

### Application Kit[edit]

The Application Kit provides classes oriented around graphical user interface capabilities.

## See also[edit]

* Free and open-source software portal

* Darling (software), a compatibility layer that relies on GNUstep
* GNUstep fat bundle
* GNUstep Renaissance, framework for XML description of portable GNUstep/Mac OS X user interfaces
* Miller Columns, the method of file tree browsing the GWorkspace File Viewer uses
* Property list, often used file format to store user settings
* StepTalk, Scripting framework
* Window Maker, a window manager designed to emulate the NeXT GUI as part of the wider GNUstep project

## References[edit]

1. ^ Ported from NeXTSTEP. Recent builds, when built with libobjc2, can use a newer version ported from Mac OS X Snow Leopard
2. ^ "GNUstep Developer Tools - RIGS". www.gnustep.org. Retrieved 10 April 2018.
3. ^ GScheme Archived 2005-12-18 at the Wayback Machine
4. ^ "GNUstep History". gnustep.made-it.com. Retrieved 10 April 2018.
5. ^ "gnustep/libs-boron: Boron is the atom that comes before carbon". GitHub. GNUstep. 23 March 2019.
6. ^ "gnustep/libs-corebase". GNUstep. 19 November 2019.
7. ^ "gnustep/libs-quartzcore". GNUstep. 11 December 2019.
8. ^ "Category:Applications - GNUstepWiki". wiki.gnustep.org. Archived from the original on 23 March 2021. Retrieved 10 April 2018.
9. ^ "GNUstep Objective-C Runtime 2.0". GitHub. "Note: Microsoft's WinObjC project contains a friendly fork of this library that includes a work around for the incremental linking issue."

## External links[edit]

Wikimedia Commons has media related to GNUstep.

* Official website
* GNUstep Application Project
* A 2003 interview with GNUstep developer Nicola Pero Archived 2007-01-07 at the Wayback Machine
* FLOSS Weekly Interview with Gregory Casamento and Riccardo Mottola from GNUstep
* GNUstep on Debian, FreeBSD, MacPorts
* NEXTSPACE desktop environment, based on GNUstep

* v
* t
* e

GNU Project

History|

* GNU Manifesto
* Free Software Foundation
* Europe
* India
* Latin America
* History of free software

Licenses|

* GNU General Public License
* linking exception
* font exception
* GNU Lesser General Public License
* GNU Affero General Public License
* GNU Free Documentation License

Software|

* GNU (variants)
* Hurd
* Linux-libre
* glibc
* Bash
* coreutils
* findutils
* Build System
* GCC
* binutils
* GDB
* GRUB
* GNUstep
* GIMP
* Jami
* GNU Emacs
* GNU TeXmacs
* GNU Octave
* GNU Taler
* GNU R
* GSL
* GMP
* GNU Electric
* GNU Archimedes
* GNUnet
* GNU Privacy Guard
* Gnuzilla (IceCat)
* GNU Health
* GNUmed
* GNU LilyPond
* GNU Go
* GNU Chess
* Gnash
* Guix
* more...

Contributors|

* Alexandre Oliva
* Benjamin Mako Hill
* Bradley M. Kuhn
* Brian Fox
* Federico Heinz
* Georg C. F. Greve
* John Sullivan
* Nagarjuna G.
* Richard M. Stallman

Other topics|

* GNU/Linux naming controversy
* Revolution OS
* Free Software Foundation anti-Windows campaigns
* Defective by Design

* v
* t
* e

List of widget toolkits

Low-level

On AmigaOS|

* Intuition

On Classic Mac OS, macOS|

* Macintosh Toolbox
* Carbon

On Windows|

* Windows API
* UWP
* WinRT

On Unix,
under X11|

* Xlib
* XCB
* X Toolkit Intrinsics

On BeOS, Haiku|

* BeOS API

Cross-platform|

| CLI|

* OpenTK

|

* GDK
* Simple DirectMedia Layer

Java|

* JOGL
* LWJGL

On Android|

| CLI|

* Xamarin.Android

|

High-level, platform-specific

On AmigaOS|

* BOOPSI
* MUI
* ReAction GUI
* Zune

On Classic Mac OS, macOS|

| Object Pascal|

* MacApp

|

Objective-C, Swift|

* Cocoa
* Cocoa Touch

C++|

* MacApp
* PowerPlant
* THINK C

CLI|

* Xamarin.Mac
* Xamarin.iOS

On Windows|

| CLI|

* Windows Forms
* XAML
* Windows Presentation Foundation
* Windows UI Library
* Silverlight
* Microsoft XNA

|

C++|

* MFC
* Active Template Library
* Windows Template Library
* Object Windows Library

Object Pascal|

* Visual Component Library

On Unix,
under X11|

* Athena (Xaw)
* LessTif
* Motif
* OLIT
* XForms

On Android|

* Qt for Android

High-level, cross-platform

* Enlightenment Foundation Libraries
* GTK
* IUP
* XForms
* XVT

C++|

* Bedrock
* CEGUI
* Component Library for Cross Platform
* FLTK
* FOX toolkit
* OpenGL User Interface Library
* gtkmm
* JUCE
* Qt
* Rogue Wave Views
* TnFOX
* U++
* Wt
* wxWidgets
* Simple and Fast Multimedia Library

Objective-C|

* GNUstep

CLI|

* Gtk#
* Tao Framework
* OpenTK
* UIML
* MonoGame
* Moonlight
* Xamarin.Forms
* XWT[1][2]
* .NET MAUI

Adobe Flash|

* Apache Flex
* MXML

Go|

* Fyne

Haskell|

* wxHaskell

Java|

* Abstract Window Toolkit
* FXML
* JavaFX
* Qt Jambi
* Swing
* Standard Widget Toolkit
* Google Web Toolkit
* Lightweight User Interface Toolkit

JavaScript|

* Dojo Toolkit
* Echo
* Ext JS
* Google Closure Tools
* jQuery UI
* OpenUI5
* Qooxdoo
* YUI

Common Lisp|

* CAPI
* CLIM
* Common Graphics

Lua|

* IUP

Pascal|

* Lazarus Component Library

Object Pascal|

* Component Library for Cross Platform
* fpGUI
* IP Pascal
* FireMonkey

Perl|

* Perl/Tk
* wxPerl

PHP|

* PHP-GTK
* wxPHP

Python|

* Tkinter
* Kivy
* PySide
* PyQt
* PyGTK
* wxPython
* Pyjs

Ruby|

* Shoes
* QtRuby

Tcl|

* Tcl/Tk

XML|

* GladeXML
* Lively Kernel
* Extensible Application Markup Language
* XUL
* Wt

shell|

* Newt
* CDK
* Dialog

Dart|

* Flutter

* v
* t
* e

Software in the Public Interest

People|

* Martin Michlmayr (President)
* Bdale Garbee

Projects|

* 0 A.D.
* Arch Linux
* Debian
* Drizzle
* Drupal
* FFmpeg
* Fluxbox
* freedesktop.org
* FreedomBox
* Gallery Project
* GNU TeXmacs
* GNUstep
* Jenkins
* LibreOffice
* MinGW
* Open and Free Technology Community
* Open Bioinformatics Foundation
* Open64
* OpenEmbedded
* OpenVAS
* OpenWrt
* OpenZFS
* PostgreSQL
* Privoxy
* SproutCore
* X.Org Foundation
* YafaRay

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template