GNUstep began when Paul Kunz and others at SLAC 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 which the application depended on. 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. This software became known as "GNUstep".
GNUstep is a collection of objects, written in Objective-C, that provides a developer with the environment to create programs (tools and applications).
It is a platform (operating system) independend development environment. This means that the entire GNUstep framework lives within its own directory structure, to create an abstraction from the rest of the operating system, and the Applications or Tools created with GNUstep will also live within this structure.
GNUstep is not a desktop environment, but everything is there to create one.
Consistency. A major benefit of the GNUstep system is the consistency in the user interface. When a user starts an application he or she will feel comfotable real soon.
Crossplatform. GNUstep applications can be used on various platforms: Linux, MacOSX, Windows, Solaris, BSD and more. This creates platform independency. You do not have to worry about the actual operating system.
Objective-C is an object oriented programming language. It is not a standardized language, that is, there is no official standard that describes Objective-C. Brad J. Cox developed the original Objective-C language, by adding SmallTalk-80 extensions to C.
Objective-C is ANSI C with a relatively small set of smalltalk-like object oriented syntax grafted on to it. It is considered to be the most dynamic of the C based OO languages.
The Objective-C runtime is part of the GNU C compiler (gcc). And also part of the NeXT and Mac OS X compilers.
Dennis Gladding wrote the first GNU version in 1992, shortly followed by the second version by Richard Stallman. In 1993 the next version appeared written by Kresten Thorup who also used this version for the actual NeXT implementation. Later versions where maintained by Ovidiu Predescu and currently (2001) Stan Shebs of Apple Computer Inc. is the responsible person.
Protocols. A protocol declares the methods which should be implemented on a class which defines a given protocol. Since Objective-C lacks multiple inheritance, we can use Protocols to make up for this.
Categories. Categories allow you to add or repair functionality of a given class without having access to its source code. Whenever an object of the type you added the category to is instantiated within your program, it has the extra methods you added to it.
GNUstep is implemented as a system on the OS, with a clear distinction between the two. Default the GNUstep tree is placed in a separate directory, with everything belonging to GNUstep underneath it. The choice of this setup creates very little dependencies between the underlying OS and GNUstep.
OpenStep mainly consisted of two libraries: the Application Kit and the Foundation Kit. The Application Kit is responsible for all the graphics, and the Foundation Kit is responsible for all low-level work (not GUI related).
Since NeXT had its own windowing system in the form of Display Postscript, and GNUstep has not during the last couple of years the simple layers of OpenStep where expanded to the following layerd system:
The former OpenStep Application Kit is split in two seperate software packages: gnustep-gui and gnustep-back. The gnustep-gui package is the interface for the Applications, while the gnustep-back can be used to connect to the different windowing systems, like the X windowing system on Unix-like systems, or to the Windows system on Microsoft platforms.
The interface for non-graphical applications is gnustep-base. While the gnustep-make package is an extension to the default GNU make command that automates a lot of the normal things found in make files.
By being such a totaly different system, there are some terms that are new and specific to GNUstep.
Tool. The destinction between Tools and Applications is that Tools are in your PATH environment variable, which means you can start them from the commandline. Tools are most often non-graphical programs, like commandline applications and daemons and can be found in the Tools/ directory.
Bundle. A bundle is a collection of resources making up a discrete package for use. There are currently three types of bundles: applications, frameworks and loadable bundles.
Application. An Application is a program with resources. Since graphical programs have a lot of resources like icons and the like, it would be most convenient to have everything in one place. To have a single directory that holds everything that belongs to that program. This is what an Application in the GNUstep terminology is, it is a directory with an executable and all its resources.
Framework. A framework is a dynamic shared library with all its resources; including header files, documentation. It could even contain several different versions of a library for e.g. backwards compatibility.
Loadable bundle. A loadable bundle is a kind of plug-in, except that there are two types of loadable bundles, namely plug-ins and palettes. A plug-in is a bundle that can be loaded by an application to provide additional functionality, while a palette is a plug-in for GORM, the interface builder. A palette is used to extend GORM with custom UI objects. Palettes have a .palette extension.
The interface elements embedded in GNUstep resemble the NeXTSTEP interface. Some love it and some think it is ancient, but it is the interface that is there. To give you an idea what building Applications with GNUstep will look like, here is an image of an active desktop: