GNUstep.org

1. GNUstep Frequently Asked Questions for Users

Last updated March, 20 2004. Please send corrections to gnustep-maintainer@gnu.org. Also look at the (developer) FAQ for more developer oriented questions.

1.1 GNUstep General Information  
1.2 Compiling and Installing  
1.3 Compatibility and Layout  
1.4 Troubleshooting  


1.1 GNUstep General Information

1.1.1 What is GNUstep?  
1.1.2 What is the OpenStep standard?  
1.1.3 What platforms does GNUstep run on?  
1.1.4 Does GNUstep run on Windows?  
1.1.5 What is GNUstep's position towards KDE and the GNOME project?  
1.1.6 Which Foundation Library can I use?  
1.1.7 How can I get GNUstep?  
1.1.8 How do you run GNUstep?  
1.1.9 Is there a web site?  
1.1.10 When is GNUstep intended to be available?  
1.1.11 What is usable?  


1.1.1 What is GNUstep?

GNUstep is the Free Software Foundation's effort to implement NeXT Software Inc.'s (now Apple Inc.) OpenStep Standard. The project is not finished, so some parts are not as polished as they could be.


1.1.2 What is the OpenStep standard?

OpenStep is an Application Programming Interface (API) for creating applications using the Objective C language. It was published by NeXT Computer Inc. in 1994.

OpenStep consists of three parts: the `FoundationKit', a library of non-graphical objects; the `AppKit', a library of objects useful in creating graphical applications; and `Display Postscript', an interface for drawing to the screen using the PostScript graphics language.

You can obtain a copy of the OpenStep standard from the GNUstep web site http://www.gnustep.org or it's mirror sites.


1.1.3 What platforms does GNUstep run on?

See the list of supported platforms at http://www.gnustep.org/information/machines_toc.html for information on what machines GNUstep builds on and what the status of the ports is. Probably a few days porting to any other Unix system where current gcc/egcs compilers and gdb debugger work.


1.1.4 Does GNUstep run on Windows?

The primary targets for GNUstep are free 'Unix' platforms such as GNU/Linux.

That being said, the base library should run on Windows-NT,98 with the Cygwin unix emulation library from Cygnus (http://sourceware.cygnus.com/cygwin/) or the MinGW libraries. At present there are a few problems with networking (Distributed Objects) support, but the library is believed to work.

The gui library needs a win32 backend library to work under Windows-NT. The backend library is a thin layer that converts the GNUstep methods to handle drawing of GUI elements to calls to the win32 API. This is a project is in an alpha state.

The application-wrapper used for GNUstep already allows for multiple binaries to be stored for different systems, so you should be able to write once, deploy anywhere.


1.1.5 What is GNUstep's position towards KDE and the GNOME project?

You can use GNUstep with GNOME and/or KDE. GNUstep displays on top of X11. You can still do programming in C (since Objective-C is just a super-set of C), and when (if?) GCC gets around to it, you'll be able to mix C++ and Objective-C code in the SAME file.

GNUstep, is much more than a window manager or desktop environment. It frees you to develop cross-platform applications without the work of developing an OS independent framework from scratch. It gives you lots of basic functionality, from Font Panels to Unicode strings to Distributed Objects.


1.1.6 Which Foundation Library can I use?

That depends ...

If you only want to use the database package - gnustep-db, you can use either the gnustep base library or libFoundation.

If you want to develop/use GNUstep gui applications, you must use the gnustep-base library since libFoundation is (13-Feb-2000) missing much essential functionality.


1.1.7 How can I get GNUstep?

Get the HOWTO from http://www.gnustep.org/resources/documentation/GNUstep-HOWTO Get the latest release from ftp://ftp.gnustep.org. If you're really adventurous, get the latest snapshot by anonymous ftp from ftp://ftp.gnustep.org/pub/daily-snapshots

Use anonymous CVS to keep up to date - instructions are in the HOWTO.


1.1.8 How do you run GNUstep?

You are presumably under the misapprehension that GNUstep is some sort of program or window manager.

It isn't.

GNUstep is a whole load of things - primarily a set of libraries for developing software.

At present, it's those libraries, plus various command-line based support tools and service providing daemons, plus various GUI development tools, a GUI desktop/workspace application, etc.

At no stage will you ever 'run' GNUstep - you will run applications and tools and will make use of it's services. At some point you may well find packages distributed as 'GNUstep' systems in the way that you get 'GNU/Linux' systems packaged today. Look at Simply GNUstep http://simplygnustep.sourceforge.net/ for instance.

If you want to see a sample GUI application running you need to build GNUstep and look at the example applications in the gnustep-examples package. Build 'Finger' or 'Ink' and start it with 'openapp Finger.app' or 'openapp Ink.app'

To look best - use WindowMaker (the currently preferred GNUstep window manager) as your window manager.


1.1.9 Is there a web site?

See http://www.gnustep.org/.


1.1.10 When is GNUstep intended to be available?

It's usable now. Major releases are made about every six months. However, if you are a serious developer, it's probably best to use the latest snapshots.


1.1.11 What is usable?

  • gnustep-make does pretty much what the makefiles in NeXTstep do.
  • gnustep-base (Foundation) stuff should work fine for almost all projects.
  • gnustep-db is only EOF-1.0 compatible but should work OK.
  • gnustep-gui (AppKit) has a lot working but there is still stuff missing.
  • DGS (Display Ghostscript) is usable but slow.

What does this mean for users? Many applications will run quite well. Applications that require very complex drawing and some unusual features may not.


1.2 Compiling and Installing

1.2.1 How do I compile GNUstep on my machine?  
1.2.2 Are there any precompiled packages available?  
1.2.3 What are these type and size warnings?  
1.2.4 What are these import warnings?  


1.2.1 How do I compile GNUstep on my machine?

Read the file `GNUstep-HOWTO', which comes with the GNUstep distribution (gnustep-make), and also is available separately on the GNUstep web site.


1.2.2 Are there any precompiled packages available?

Check http://www.gnustep.org/resources/sources.html for links to RPMS. Debian packages are also available. You can check the debian site(s) for preconfigured GNUstep packages. Also check the BSD sites for GNUstep ports.


1.2.3 What are these type and size warnings?

These warnings:
 
/usr/bin/ld: warning: type and size of dynamic symbol
`__objc_class_name_NSConstantString' are not defined

are a common occurence and are due to a mismatch between gcc and ld. They don't do any harm so they can be safely ignored. They have been fixed in GCC version 3.1.


1.2.4 What are these import warnings?

Do you get these obnoxious warning whenever you compile an application, tool, or Objective-C program:

 
warning: using `#import' is not recommended
[...]

Up until gcc 3.4, the #import directive was not implemented correctly. As a result, the GCC compiler automatically emitted a warning whenever #import was used. As of gcc 3.4, this problem has been fixed, so presumably, this warning is no longer emitted when code is compiled.


1.3 Compatibility and Layout

1.3.1 Can I run NeXT OPENSTEP or MacOSX programs on GNUstep?  
1.3.2 Is GNUstep following Changes to OpenStep and MacOSX?  
1.3.3 Do we have to have the NeXTstep look and feel?  
1.3.4 What's up with the directory structure?  
1.3.5 Why not use Frameworks?  


1.3.1 Can I run NeXT OPENSTEP or MacOSX programs on GNUstep?

You can't run these programs on GNUstep, but if you have the source code for the programs, you should be able to port them to GNUstep and compile them. Whether or not you will be able to run them depends on how complete GNUstep is at the time.


1.3.2 Is GNUstep following Changes to OpenStep and MacOSX?

Yes, gnustep-base already contains the documented changes in the Foundation library. GNUstep aims to be compatible with both the OpenStep specification and with MacOS-X. It should be easy to write an application that compiles cleanly under both GNUstep and Cocoa.


1.3.3 Do we have to have the NeXTstep look and feel?

GNUstep is aiming for something like the NeXTstep-3.3 look and feel. Although we don't want to force anyone into this, a lot of the power and ease of use comes from this feel. The look of GNUstep is something different - buttons and other widgets can look different but still act the same way. We hope to implement themes which will allow this. Actually we're hoping someone will volunteer to do it.


1.3.4 What's up with the directory structure?

First of all, GNUstep uses a slightly different directory structure than NeXT or MacOSX. Part of this is historical, part is because we can't do things the same way (see see section 1.3.5 Why not use Frameworks?).

GNUstep also stores libraries and binaries in subdirectories based on the operating system and cpu. This is so you can compile and store binaries for different systems in the same directory structure. MacOSX uses Fat binaries to accomplish this (another reason we do it differently). If you want, you can get rid of this using the `--enable-flattened' option to the gnustep-make package.


1.3.5 Why not use Frameworks?

Frameworks are much more difficult to port and to use, and are very unnatural on a unix system - extremely unnatural on Windows. In a framework, the shared dynamic library is inside a framework wrapper directory. Because of this, the dynamic linker can't find it.

We have frameworks, so how do we work around that? Well, we build dynamic links from a directory inside the dynamic linker path into the framework, which work, but then you can't move the framework anywhere else on the system, otherwise you break the link, and nothing will find the framework any longer!

On systems without dynamic links, like Windows, we can't even do this! We have to copy the library from the framework into the dynamic linker path, but that is simply a shared library then! Absolutely no difference. You put the dynamic library in a system directory in the dynamic linker path, and associate with that library a resource directory.

I think OpenStep for Windows did that, and still called them frameworks. Oh well we can do the same then, and call our libraries frameworks.

In a shared library, the shared dynamic library is in a directory which is in the path to the dynamic linker. the dynamic linker can find it very easily. this is how all shared and static libraries work on Unix systems, on Windows systems and possibly on most system at all.

Moreover, the OpenStep API requires us to provide some stuff for frameworks, like creating and registering automatically a framework object each time a framework is used (linked at runtime, or linked into the app), and attaching to it the list of classes inside the framework - which are not particularly trivial to implement - they depend on playing with the linker and the object file format - and might produce troubles when porting. And we never use these facilities.

For Apple MacOSX sure it's easier. They can modify the system linker, compiler, the system dynamical linker. They always know on which platform they are working (their own), etc. They can modify the system to support frameworks natively. Easy that way.

But GNUstep is meant to run on many different platforms, platforms which we don't control (Windows, Sun Solaris, Darwin, GNU/Linux, Unix variants) and which have different linkers and do not support frameworks natively. On some systems it's difficult to just load a bundle or compile a shared library!

So building the core libraries as 'libraries' means that it's much easier to port them, and it's much more difficult to break them.

Sure, frameworks have a bundle of resources associated with it - but we can very easily associate a bundle of resource with a shared library, no reason why not. We are doing it.

So please note that GNUstep libraries are meant to be much similar to MacOS X frameworks. They are composed of a shared library and associated with a bundle of resources. There is a difference in terminology, in where the resources are installed, and possibly a slight difference in the NSBundle API to get to the resource bundle (anyway, it's a one line difference between MacOSX and GNUstep, so it looks like very easy to #ifdef).

In other words, GNUstep libraries are meant to basically do the same as frameworks do on MacOSX, but to be portable to strange platforms (such as Windows).


1.4 Troubleshooting

1.4.1 Problems compiling (loading shared libs)  
1.4.2 Problems compiling (GNUstep Internal Error)  
1.4.3 Problems with Alt key  
1.4.4 Problems with gcc3  
1.4.5 Problems with fonts  
1.4.6 No Makefile  


1.4.1 Problems compiling (loading shared libs)

If you get something like

 
plmerge: error while loading shared libraries:
libgnustep-base.so.1: cannot open shared object file: No such file or directory

or this:

 
Making all for service example...
make[2]: *** [example.service/Resources/Info-gnustep.plist] Error 1
make[1]: *** [example.all.service.variables] Error 2
make[1]: Leaving directory `/home/multix/gnustep-gui-0.8.6/Tools'
make: *** [internal-all] Error 2

This means your GNU make is being overly protective. When you try to become root (e.g. to install something), certain environment variables like LD_LIBRARY_PATH are unset in order to reduce the possibility of a security breach. If you are becoming root to install something, you need to exec the GNUstep.sh file as root, just as you do when you login. Although for simplicity, you can also try this:

 
make LD_LIBRARY_PATH=$LD_LIBRARY_PATH

You could also be having problems with gcc. gcc 2.96 does not work (Mandrake 8.1, perhaps others). Use a different compiler, like gcc 3.x.


1.4.2 Problems compiling (GNUstep Internal Error)

If you get

 
GNUSTEP Internal Error:
The private GNUstep function to establish the argv and environment
variables was not called.
Please report the error to bug-gnustep@gnu.org.

when compiling the gui library, there could be several things wrong. One is that you installed the gnustep-objc library, but the compiler found another Objecive-C library (like the one that came with gcc). If you are using gcc 3.x, DO NOT use the gnustep-objc library.


1.4.3 Problems with Alt key

It's possible the Alt key is not where you think it is or is defined incorrectly. Try running the GSTest application, KeyboardInput test (located in the examples package at ftp://ftp.gnustep.org/pub/gnustep/core) to test it. See http://www.gnustep.org/resources/documentation/User/Gui/KeyboardSetup.html for information on how to change the settings.

If you are using WindowMaker, it's possible it is grabing this key and using it for itself. To check, open Window Maker's WPrefs and go to the Mouse Preferences. Then use another value for the "Mouse grab modifier" (bottom right). That will allow you to alt-drag things.


1.4.4 Problems with gcc3

Don't forget you need to update binutils and libc also.


1.4.5 Problems with fonts

Why do the characters get changed to asterisks ('*')?

The problem you are getting come from the fact that the xlib backend (when not using Xft) will only use one fixed X font for a given font name. If the font "helvetica" is used inside of GNUstep the one selected X font, in your case "-*-helvetica-medium-r-normal--12-*-*-*-p-*-iso8859-1" is used. So only characters (or glyphs) that are available in that font can be displayed. The selection of which font name to use happens inside the font_cacher and is more or less at random (the order fonts are listed by the X system).

You can influence the fonts that are available by setting:

 
defaults write NSGlobalDomain GSFontMask "*iso8859-13"
font_cacher

(or using a different character set, like iso8859-2). This is really a bug in GNUstep, but it hasn't been fixed yet.

The other option is the use the art backend, which handles fonts much better. When compiling gnustep-back, start with

 
./configure --enable-graphics=art


1.4.6 No Makefile

I tried to compile something and I get:

 
GNUmakefile:27: /Makefiles/common.make: No such file or directory 
GNUmakefile:39: /Makefiles/aggregate.make: No such file or directory 
gmake: *** No rule to make target `/Makefiles/aggregate.make'.  Stop. 

Make sure you have installed the gnustep-make package and also type:

 
source /usr/GNUstep/System/Library/Makefiles/GNUstep.sh

You can put this line in your `.profile' or `.bash_profile' file so that it is done automatically when you log in.



This document was generated by Wim Oudshoorn on March, 20 2004 using texi2html