mirror of
https://github.com/gnustep/tools-make.git
synced 2025-05-06 11:50:42 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@12239 72102866-910b-0410-8b05-ffd578937521
855 lines
40 KiB
Text
855 lines
40 KiB
Text
\input texinfo @c -*-texinfo-*-
|
|
@c A FAQ for GNUstep
|
|
|
|
@node Top, GNUstep General Information, (dir), (dir)
|
|
@chapter GNUstep Frequently Asked Questions with Answers
|
|
|
|
Last updated @today{}
|
|
Please send corrections to @email{gnustep-maintainer@@gnu.org}.
|
|
|
|
@menu
|
|
* GNUstep General Information::
|
|
* Compatibility with OPENSTEP/Cocoa/MacOSX::
|
|
* Compiling and Developing::
|
|
* GNU Objective C Compiler and Objective C Runtime Library::
|
|
* GNUstep Base Library::
|
|
* GNUstep GUI Library::
|
|
* GNUstep DisplayGhostScript Server::
|
|
@end menu
|
|
|
|
@node GNUstep General Information, Compatibility with OPENSTEP/Cocoa/MacOSX, Top, Top
|
|
@section GNUstep General Information
|
|
|
|
@menu
|
|
* What is GNUstep?::
|
|
* What is the OpenStep standard?::
|
|
* What platforms does GNUstep run on?::
|
|
* Does GNUstep run on Windows?::
|
|
* What is GNUstep's position towards KDE and the GNOME project?::
|
|
* Is the Objective C API for GTK related?::
|
|
* How about implementing parts of the Application Kit with GTK?::
|
|
* Which compiler can I use? Where can I get it?::
|
|
* Which Foundation Library can I use?::
|
|
* How do you use the gnustep-make package?::
|
|
* How can I get GNUstep?::
|
|
* How do you run GNUstep?::
|
|
* Is there a web site?::
|
|
* When is GNUstep intended to be available?::
|
|
* What is usable?::
|
|
@end menu
|
|
|
|
@node What is GNUstep?, What is the OpenStep standard?, GNUstep General Information, GNUstep General Information
|
|
@subsection 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, however some components are useable now.
|
|
|
|
The GNUstep project consists of the following sub-projects:
|
|
|
|
@itemize @bullet
|
|
|
|
@item GNU Objective C Compiler and Objective C Runtime Library -
|
|
Although not actually a component of GNUstep, GCC and the GNU
|
|
Objective C Runtime Library are integral to GNUstep, since they are used
|
|
to make every GNU Objective C program.
|
|
|
|
@item GNUstep Base Library - Code for non-graphical objects, such as
|
|
strings, collections, archiving support and distributed objects
|
|
messaging. (Including functionality similar to OpenStep's
|
|
@samp{FoundationKit}.)
|
|
|
|
@item GNUstep GUI Library - Code for graphical objects used in making a
|
|
Graphical User Interface (GUI). This includes buttons, sliders, text
|
|
fields, windows, menus, etc. (Including functionality similar to
|
|
OpenStep's @samp{AppKit}.)
|
|
|
|
@item GNUstep DisplayGhostscript Server - A server that draws PostScript
|
|
graphics to the screen, and receives events from the keyboard and
|
|
mouse. It is based on GNU GhostScript. There is also an DPS extension to
|
|
Xfree*6 that is usable.
|
|
|
|
@item Various Tools and applications, including GORM, The GNUstep
|
|
interface builder for graphically assembling application interfaces, and
|
|
ProjectCenter, a project manager.
|
|
|
|
@end itemize
|
|
|
|
@node What is the OpenStep standard?, What platforms does GNUstep run on?, What is GNUstep?, GNUstep General Information
|
|
@subsection 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 @samp{FoundationKit}, a library of
|
|
non-graphical objects; the @samp{AppKit}, a library of objects usful in
|
|
creating graphical applications; and @samp{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
|
|
@url{http://www.gnustep.org} or it's mirror sites.
|
|
|
|
@node What platforms does GNUstep run on?, Does GNUstep run on Windows?, What is the OpenStep standard?, GNUstep General Information
|
|
@subsection What platforms does GNUstep run on?
|
|
|
|
See the list of supported platforms at
|
|
@url{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.
|
|
|
|
@node Does GNUstep run on Windows?, What is GNUstep's position towards KDE and the GNOME project?, What platforms does GNUstep run on?, GNUstep General Information
|
|
@subsection 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 looking for a volunteer.
|
|
|
|
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.
|
|
|
|
|
|
@node What is GNUstep's position towards KDE and the GNOME project?, Is the Objective C API for GTK related?, Does GNUstep run on Windows?, GNUstep General Information
|
|
@subsection 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 superset 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.
|
|
|
|
|
|
@node Is the Objective C API for GTK related?, How about implementing parts of the Application Kit with GTK?, What is GNUstep's position towards KDE and the GNOME project?, GNUstep General Information
|
|
@subsection Is the Objective C API for GTK related?
|
|
|
|
No. GNUstep applications provide their GUI via the OpenStep
|
|
API, which provides fully object-oriented access to GUI manipulation.
|
|
|
|
The object-oriented nature of the libraries and language make it much easier
|
|
for new users to create their own subclasses rather than simply using the
|
|
supplied widgets as in other frameworks.
|
|
|
|
@node How about implementing parts of the Application Kit with GTK?, Which compiler can I use? Where can I get it?, Is the Objective C API for GTK related?, GNUstep General Information
|
|
@subsection How about implementing parts of the Application Kit with GTK?
|
|
|
|
Yes and No - The GNUstep architecture provides a single,
|
|
platform-independent, API for handling all aspects of GUI interaction
|
|
(implemented in the gstep-gui library), with a backend architecture
|
|
that permits you to have different display models (display postscript,
|
|
X-windows, win32, berlin ...) while letting you use the same code
|
|
for printing as for displaying. Use of GTK in the frontend gui
|
|
library would remove some of those advantages without adding any.
|
|
|
|
That being said, a backend library could be implemented using gtk
|
|
if anyone wanted to do so. Since the frontend library handles most
|
|
of the work involved in implementing the OpenStep API, the backend
|
|
is a relatively thin layer and the advantages of GTK over direct
|
|
xlib or win32 calls is likely to be minimal. If/when GTK is ported
|
|
to more systems, a backend written using it could be a valuable
|
|
asset - volunteers are, as always, wecome.
|
|
|
|
@node Which compiler can I use? Where can I get it?, Which Foundation Library can I use?, How about implementing parts of the Application Kit with GTK?, GNUstep General Information
|
|
@subsection Which compiler can I use? Where can I get it?
|
|
|
|
Use gcc-2.8.1 or later, from any GNU ftp site or, on some
|
|
platforms you must use egcs-1.1.1 or later, from http://egcs.cygnus.com/
|
|
|
|
@node Which Foundation Library can I use?, How do you use the gnustep-make package?, Which compiler can I use? Where can I get it?, GNUstep General Information
|
|
@subsection 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.
|
|
|
|
|
|
@node How do you use the gnustep-make package?, How can I get GNUstep?, Which Foundation Library can I use?, GNUstep General Information
|
|
@subsection How do you use the gnustep-make package?
|
|
|
|
Good question. Read the tutorials at the GNUstep web site. Also, use the
|
|
makefiles in the libraries, tool directories, and test applications as
|
|
examples.
|
|
|
|
@node How can I get GNUstep?, How do you run GNUstep?, How do you use the gnustep-make package?, GNUstep General Information
|
|
@subsection How can I get GNUstep?
|
|
|
|
Get the HOWTO from
|
|
@url{http://www.gnustep.org/resources/documentation/GNUstep-HOWTO}
|
|
Get the latest release from @url{ftp://ftp.gnustep.org}. If you're
|
|
really adventurous, get the latest snapshot by anonymous ftp from
|
|
@url{ftp://ftp.gnustep.org:/pub/daily-snapshots}
|
|
|
|
Use anonymous CVS to keep up to date - instructions are in the
|
|
HOWTO.
|
|
|
|
@node How do you run GNUstep?, Is there a web site?, How can I get GNUstep?, GNUstep General Information
|
|
@subsection How do you run GNUstep?
|
|
|
|
You are presumably under the misapprehension that GNUstep is
|
|
some sort of 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. In the future, it
|
|
will be the libraries, plus the support tools, 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 (though at some point
|
|
you may well find packages distributed as 'GNUstep' systems in the
|
|
way that you get 'Linux' systems packaged today).
|
|
|
|
Current tools are -
|
|
|
|
@example
|
|
The makefiles package
|
|
To make building GNUstep tools and apps simple.
|
|
The 'openapp' script
|
|
To start up a GUI application from the command line.
|
|
The defaults tools
|
|
To read, create, delete, and modify user defaults from the command
|
|
line.
|
|
The name server
|
|
To permit applications and tools to locate each other and
|
|
communicate.
|
|
The pasteboard server
|
|
To permit cut-and-paste, drag-and-drop, and to let applicationsm
|
|
and tools transparently provide services to each other.
|
|
The distributed notification center
|
|
To permit applications and tools to be notified of arbitrary
|
|
external events.
|
|
The 'make_services' program
|
|
To locate (and cache information about) applications that are
|
|
willing to provide services to other applications.
|
|
The 'set_show_service' program
|
|
A command-line utility to determine what services an application
|
|
should be permitted to offer on it's 'services' menu.
|
|
@end example
|
|
|
|
If you want to see a sample GUI application running you need to build
|
|
GNUstep and look at the example applications in the gstep-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.
|
|
|
|
@node Is there a web site?, When is GNUstep intended to be available?, How do you run GNUstep?, GNUstep General Information
|
|
@subsection Is there a web site?
|
|
|
|
See @url{http://www.gnustep.org/}.
|
|
|
|
@node When is GNUstep intended to be available?, What is usable?, Is there a web site?, GNUstep General Information
|
|
@subsection When is GNUstep intended to be available?
|
|
|
|
It's usable now. Releases are made about every six months. However, if
|
|
you are a serious developer, it's probably best to use the latest
|
|
snapshots. See the GNUstep web site for a release schedule.
|
|
|
|
@node What is usable?, , When is GNUstep intended to be available?, GNUstep General Information
|
|
@subsection What is usable?
|
|
|
|
@itemize @bullet
|
|
@item gstep-make does pretty much what the makefiles in NeXTstep do.
|
|
@item gstep-base (Foundation) stuff should work fine for almost all projects.
|
|
@item gstep-db is only EOF-1.0 compatible but should work ok.
|
|
@item gstep-gui (AppKit) has a lot working but there is still stuff missing.
|
|
@item DGS (Display Ghostscript) is usable but slow.
|
|
@end itemize
|
|
|
|
@c ****************************************************************
|
|
@c Compiling
|
|
@node Compatibility with OPENSTEP/Cocoa/MacOSX, Compiling and Developing, GNUstep General Information, Top
|
|
@section Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
|
|
@menu
|
|
* Can I run NeXT OPENSTEP or Apple Rhapsody programs on GNUstep?::
|
|
* Is it easy to port OPENSTEP and Rhapsody programs to GNUstep?::
|
|
* Can I transfer archived data from GNUstep to Cocoa?::
|
|
* Does distributed objects work between GNUstep and Cocoa?::
|
|
* Is there an Interface Builder for GNUstep?::
|
|
* Can I use my original NIB files?::
|
|
* Will code without NIB files work?::
|
|
* Is GNUstep following Apple's Changes to OpenStep?::
|
|
* Do we have to have the NeXTstep look and feel?::
|
|
* Can one use the hybrid "Objective-C++"::
|
|
* Is there a plan to support Java/YellowBox Bindings?::
|
|
* What if I compile GNUstep under OPENSTEP/MacOS X Server?::
|
|
@end menu
|
|
|
|
@node Can I run NeXT OPENSTEP or Apple Rhapsody programs on GNUstep?, Is it easy to port OPENSTEP and Rhapsody programs to GNUstep?, Compatibility with OPENSTEP/Cocoa/MacOSX, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Can I run NeXT OPENSTEP or Apple Rhapsody 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.
|
|
|
|
@node Is it easy to port OPENSTEP and Rhapsody programs to GNUstep?, Can I transfer archived data from GNUstep to Cocoa?, Can I run NeXT OPENSTEP or Apple Rhapsody programs on GNUstep?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Is it easy to port OPENSTEP and Rhapsody programs to GNUstep?
|
|
|
|
It is probably easy for simple programs. There are some portability
|
|
tools
|
|
to make this easier (@url{http://www.gnustep.org/resources/source_port.html}),
|
|
or rewrite the Makefiles yourself. You will also have to
|
|
translate the NIB files (if there are any) to GNUstep model files using
|
|
the nib2gmodel program (from @url{ftp://ftp.gnustep.org/pub/gnustep/dev-apps}).
|
|
|
|
@node Can I transfer archived data from GNUstep to Cocoa?, Does distributed objects work between GNUstep and Cocoa?, Is it easy to port OPENSTEP and Rhapsody programs to GNUstep?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Can I transfer archived data from GNUstep to Cocoa?
|
|
|
|
Apple's archiving format is proprietary and not documented, so this
|
|
poses a problem for anyone wanting to implement compatibility with it.
|
|
However, even if we reverse engineered the format, there are enough
|
|
differences between the class and ivar layouts to make this sort of
|
|
compatibility difficult. Not to mention the fact that we would
|
|
constantly have to keep up with the changes Apple made. Also Apple's
|
|
archiving format, as far as we know, would not be compatible between
|
|
different machines because of endiness issues, although GNUstep doesn't
|
|
have this problem.
|
|
|
|
Your best bet is to implement your own archiving format that would work
|
|
both with GNUstep and Cocoa. Fortuneatly, you don't have to start from
|
|
scratch, since this has been essentially done for you in the nib2gmodel
|
|
tool, which has an archiver that works both on GNUstep and Cocoa. It
|
|
might be nice to split this off into a separate project to make it
|
|
easier for other people to do the same thing.
|
|
|
|
@node Does distributed objects work between GNUstep and Cocoa?, Is there an Interface Builder for GNUstep?, Can I transfer archived data from GNUstep to Cocoa?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Does distributed objects work between GNUstep and Cocoa?
|
|
|
|
See the answer to the previous question (on archive compatibility) for
|
|
why this won't work either.
|
|
|
|
@node Is there an Interface Builder for GNUstep?, Can I use my original NIB files?, Does distributed objects work between GNUstep and Cocoa?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Is there an Interface Builder for GNUstep?
|
|
|
|
There is an Interface Builder for GNUstep called Gorm, but it is
|
|
in alpha release, so it may not work perfectly. You can download it from
|
|
the ftp site or via http.
|
|
The Project Manager ProjectCenter is also available.
|
|
|
|
@node Can I use my original NIB files?, Will code without NIB files work?, Is there an Interface Builder for GNUstep?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Can I use my original NIB files?
|
|
|
|
No - NeXT/Apple never documented their nib format, so GNUstep supports
|
|
both the 'gmodel' format (which stores information as text
|
|
(property-lists) and can therefore be edited 'by hand') and binary
|
|
archive format (which can be edited by Gorm). There IS a conversion
|
|
tool called nib2gmodel that can be compiled under OPENSTEP to convert
|
|
OPENSTEP nib files to GNUstep gmodel files.
|
|
|
|
@node Will code without NIB files work?, Is GNUstep following Apple's Changes to OpenStep?, Can I use my original NIB files?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Will code without NIB files work?
|
|
|
|
Well, GNUstep implements the OpenStep API, not the old NeXTstep
|
|
API but, Yes - once the gui library is complete, OpenStep or MacOS-X
|
|
code should work without translation under GNUstep.
|
|
|
|
@node Is GNUstep following Apple's Changes to OpenStep?, Do we have to have the NeXTstep look and feel?, Will code without NIB files work?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Is GNUstep following Apple's Changes to OpenStep?
|
|
|
|
Yes - gstep-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 Yellow
|
|
Box.
|
|
|
|
@node Do we have to have the NeXTstep look and feel?, Can one use the hybrid "Objective-C++", Is GNUstep following Apple's Changes to OpenStep?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Do we have to have the NeXTstep look and feel?
|
|
|
|
Gnustep is aiming for something like the NeXTstep-3.3 look and
|
|
feel. This is mostly determined by the gui backend library. In the
|
|
case of the two existing backends (xdps and xgps), both are designed
|
|
to look like NeXTstep/OPENSTEP. If someone wants to write a backend
|
|
with a different look, they can. This would only be a few man-months
|
|
work.
|
|
|
|
@node Can one use the hybrid "Objective-C++", Is there a plan to support Java/YellowBox Bindings?, Do we have to have the NeXTstep look and feel?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Can one use the hybrid "Objective-C++"
|
|
that one could on the NeXT?
|
|
|
|
No - at present the GNU compiler (gcc) does not support
|
|
"Objective-C++" There are no specific plans to make it do so, but
|
|
any volunteers to do it would be welcome.
|
|
|
|
@node Is there a plan to support Java/YellowBox Bindings?, What if I compile GNUstep under OPENSTEP/MacOS X Server?, Can one use the hybrid "Objective-C++", Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection Is there a plan to support the Java/YellowBox Bindings?
|
|
|
|
Yes. The GNustep Java library/bridge called JIGS is available now. JIGS
|
|
is a free (LGPL) Java Interface for GNUstep; it can automatically wrap
|
|
Objective-C libraries based on GNUstep, making them accessible directly
|
|
to the Java programmer as if they were Java libraries. As a side effect,
|
|
it is also possible to use the whole engine in the reverse way: JIGS
|
|
provides a high level API to allow Objective-C programmers to start java
|
|
virtual machines inside GNUstep Objective-C code and access java objects
|
|
in the java virtual machine transparently, as if they were objective-C
|
|
objects.
|
|
|
|
@node What if I compile GNUstep under OPENSTEP/MacOS X Server?, , Is there a plan to support Java/YellowBox Bindings?, Compatibility with OPENSTEP/Cocoa/MacOSX
|
|
@subsection What if I compile GNUstep under OPENSTEP/MacOS X Server?
|
|
|
|
No - GNUstep uses the X-windows display postscript extension
|
|
- the interface to that is not the same as the interface to the
|
|
OPENSTEP/MacOS-X windows server. While someone could write a
|
|
backend library to provide the interface, nobody has bothered to
|
|
date.
|
|
|
|
Also, the GNUstep base library is still being ported to Darwin.
|
|
|
|
@c ****************************************************************
|
|
@c Compiling
|
|
@node Compiling and Developing, GNU Objective C Compiler and Objective C Runtime Library, Compatibility with OPENSTEP/Cocoa/MacOSX, Top
|
|
@section Compiling and Developing
|
|
|
|
@menu
|
|
* How can I help with GNUstep?::
|
|
* How do I start writing code?::
|
|
* How do I start writing documentation?::
|
|
* How do I update the task list?::
|
|
* How do I start writing tests?::
|
|
* How do I start writing applications?::
|
|
* How can I help with the GNUstep website?::
|
|
* How do I compile GNUstep on my machine? ::
|
|
* Are there any precompiled packages available?::
|
|
* What are these type and size warnings?::
|
|
@end menu
|
|
|
|
@node How can I help with GNUstep?, How do I start writing code?, Compiling and Developing, Compiling and Developing
|
|
@subsection How can I help with GNUstep?
|
|
|
|
@enumerate
|
|
@item Write/debug library code
|
|
@item Write documentation
|
|
@item Update the TODO list and library headers
|
|
@item Write applications
|
|
@end enumerate
|
|
|
|
Let people know what you are doing. Break your project up into
|
|
the smallest units you can. Feed back frequent updates to the
|
|
maintainers. Ask questions in the discussion mailing list.
|
|
|
|
Do remember that any changes beyond a few lines of code (or
|
|
documentation) require a disclaimer or copyright assignment to the
|
|
Free Software Foundation before they can be incorporated into the
|
|
project. Get in touch with the maintainer of the library you are
|
|
working on about this.
|
|
|
|
Don't start with large-scale reorganisation of anything - instead,
|
|
get a general idea in mind of what you want to do, and proceed as
|
|
much as possible with incremental changes that don't break anything
|
|
- that way you can make those incremental changes available to the
|
|
rest of the community at frequent intervals.
|
|
|
|
Don't be afraid to give up - there is no shame in finding out that
|
|
you have take on too large/complex a project. It's much better to
|
|
'resign' and take on a smaller job than to just stop without telling
|
|
anyone.
|
|
|
|
|
|
@node How do I start writing code?, How do I start writing documentation?, How can I help with GNUstep?, Compiling and Developing
|
|
@subsection How do I start writing code?
|
|
|
|
There is plenty of unimplemented stuff in the gui library and
|
|
backend libraries that volunteers can work on - just browse through
|
|
the code and see if it conforms to the documentation.
|
|
|
|
Specific tasks are noted in the developers section on the GNUstep
|
|
website.
|
|
|
|
Once you have coded something, you could always write a testcase
|
|
and documentation for it :-)
|
|
|
|
@node How do I start writing documentation?, How do I update the task list?, How do I start writing code?, Compiling and Developing
|
|
@subsection How do I start writing documentation?
|
|
|
|
All class documentation is written directly in the source code itself
|
|
and translated using the autogsdoc program. See the source code and
|
|
documentation for autogsdoc for information on documenting the classes.
|
|
|
|
Newcomers could write documentation for individual classes by
|
|
comparing the OpenStep specification, the MacOS-X documentation,
|
|
and the GNUstep source. Documentation should clearly note where
|
|
individual methods are specific to OpenStep, MacOS-X or are GNustep
|
|
extensions.
|
|
|
|
More experienced people could write documentation on general
|
|
programming topics, and tutorials for new users.
|
|
|
|
Anyone willing to write documentation, either tutorials for using
|
|
GNUstep, or reference documentation for individual classes, should
|
|
either write it in gsdoc or as plain ascii text for someone else to
|
|
format into gsdoc.
|
|
|
|
GNUstep documentation should have copyright assigned to the Free
|
|
Software Foundation.
|
|
|
|
@node How do I update the task list?, How do I start writing tests?, How do I start writing documentation?, Compiling and Developing
|
|
@subsection How do I update the task list?
|
|
|
|
The task list (@url{http://www.gnustep.org/developers/tasks.html}) is
|
|
supposed to tell people what jobs are waiting to be done.
|
|
|
|
One job of major importance that pretty much anyone can do is to
|
|
look for jobs to add to the task list. In the case of methods from
|
|
the OpenStep specification or the MacOS-X documentation not being
|
|
present in the GNustep libraries, it is also helpful to add the
|
|
method prototypes to the library header files.
|
|
|
|
Send any changes or additions to @email{bug-gnustep@@gnu.org}.
|
|
|
|
A beginner can look through the MacOS-X documentation, the OpenStep
|
|
specification and the GNUstep source and contribute TODO items.
|
|
|
|
If a class or method is in MacOS-X and OpenStep but is not in
|
|
GNUstep - it's a high priority TODO and should at least be added
|
|
to the GNUstep headers and a dummy version added to the source with
|
|
a FIXME comment.
|
|
|
|
If a class or method is in MacOS-X but not OpenStep or GNUstep -
|
|
it's a low priority TODO. It should be added to the GNUstep headers
|
|
bracketed in @code{#ifndef STRICT_OPENSTEP}
|
|
|
|
If a class or method is in OpenStep but not in MacOS-X or GNUstep
|
|
- it's a low priority TODO. It should be added to the GNUstep
|
|
headers bracketed in @code{#ifndef STRICT_MACOS_X}
|
|
|
|
There are a couple of people working on this already, so it's a
|
|
good idea to get in touch with Adam or Richard to coordinate efforts.
|
|
|
|
@node How do I start writing tests?, How do I start writing applications?, How do I update the task list?, Compiling and Developing
|
|
@subsection How do I start writing tests?
|
|
|
|
You can write testcases - where the libraries fail tests, you
|
|
could either fix the problem, or add it to the task list.
|
|
|
|
To write testcases, you need to use anonymous CVS to install the
|
|
latest GNUstep snapshots you can find. Then checkout the 'tests'
|
|
module from CVS. In the 'tests' directory, you will find a
|
|
regression testing framework.
|
|
In order to use this you will also need a recent (v 1.3.2 or later) copy of
|
|
Guile (you can get this from a GNU ftp site) and will need to hacke checked
|
|
out, built, and installed the 'guile' package from the GNUstep CVS repository.
|
|
|
|
@node How do I start writing applications?, How can I help with the GNUstep website?, How do I start writing tests?, Compiling and Developing
|
|
@subsection How do I start writing applications?
|
|
|
|
You can either look at the links on the GNUstep website for
|
|
applications that have been started, and email their owners to
|
|
volunteer to help, or you can start your own project.
|
|
|
|
@node How can I help with the GNUstep website?, How do I compile GNUstep on my machine? , How do I start writing applications?, Compiling and Developing
|
|
@subsection How can I help with the GNUstep website?
|
|
|
|
Talk to Adam Fedor @email{fedor@@gnu.org}, the maintainer.
|
|
|
|
The GNUstep website is kept as a CVS module, but the largest portions
|
|
of it (the FAQ, the TODO list, and the Documentation) are actually
|
|
generated from files in the individual GNUstep packages.
|
|
|
|
If you want to update the FAQ or TODO list or documentation - grab
|
|
the latest snapshot of the GNUstep core you can find, update it
|
|
from the CVS repository, and work with the contents of the appropriate
|
|
documentation directory.
|
|
|
|
If you want to work on other parts of the website, you can grab a copy
|
|
of the website via anonymous CVS. See
|
|
@url{http://savannah.gnu.org/cvs/?group_id=99} for instructions on how
|
|
to do that.
|
|
|
|
The main task with the website is to figure out which bits are
|
|
out-of-date (or wrong) and update/mark-as-outdated as required.
|
|
|
|
@node How do I compile GNUstep on my machine? , Are there any precompiled packages available?, How can I help with the GNUstep website?, Compiling and Developing
|
|
@subsection How do I compile GNUstep on my machine?
|
|
|
|
Read the file @file{GNUstep-HOWTO}, which comes with the GNUstep
|
|
distribution, and also is available separately on the GNUstep web
|
|
site.
|
|
|
|
@node Are there any precompiled packages available?, What are these type and size warnings?, How do I compile GNUstep on my machine? , Compiling and Developing
|
|
@subsection Are there any precompiled packages available?
|
|
|
|
Check @url{http://www.gnustep.org/resources/sources.html} for links
|
|
to sites with RPMS, and perhaps in the future, Debian packages.
|
|
In some cases. You can check the debian site for preconfigured GNUstep
|
|
packages. Also check the BSD sites for GNUstep ports.
|
|
|
|
@node What are these type and size warnings?, , Are there any precompiled packages available?, Compiling and Developing
|
|
@subsection What are these type and size warnings?
|
|
|
|
These warnings:
|
|
@example
|
|
/usr/bin/ld: warning: type and size of dynamic symbol
|
|
`__objc_class_name_NSConstantString' are not defined
|
|
@end example
|
|
|
|
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. Apparently no
|
|
one has bothered to fix them yet.
|
|
|
|
@c -------------------------------------------------------------------
|
|
|
|
@node GNU Objective C Compiler and Objective C Runtime Library, GNUstep Base Library, Compiling and Developing, Top
|
|
@section GNU Objective C Compiler and Objective C Runtime Library
|
|
|
|
@menu
|
|
* What is the Objective C Runtime Library?::
|
|
* Does it allow a mixture of Objective C and C++::
|
|
* Where can I find more information?::
|
|
@end menu
|
|
|
|
@node What is the Objective C Runtime Library?, Does it allow a mixture of Objective C and C++, GNU Objective C Compiler and Objective C Runtime Library, GNU Objective C Compiler and Objective C Runtime Library
|
|
@subsection What is the Objective C Runtime Library?
|
|
|
|
The Objective C Runtime Library provides C functions and data structures
|
|
required to execute an Objective C program.
|
|
|
|
The GNU Objective C Runtime Library offers everything NeXT's runtime
|
|
does, including Categories, Protocols, @samp{+poseAs:}, thread-safety,
|
|
class initialization on demand, delayed loading of classes, and
|
|
initialization of static instances (such as @@""-style string objects).
|
|
|
|
It also has several improvements over NeXT's implementation:
|
|
|
|
@itemize @bullet
|
|
|
|
@item NeXT's runtime requires an extra function call (objc_msgSend) for
|
|
each message that is sent; (the function looks up the receiving
|
|
instance's implementation of the method). GNU's implementation is
|
|
faster because it does not use an extra function call. Instead, it
|
|
inlines a short piece of code that makes two pointer hops into a method
|
|
dispatch table; because the code is inlined, it does not incur the
|
|
overhead of a function call.
|
|
|
|
@item When running in thread-safe mode, NeXT's runtime must aquire a
|
|
global mutual exclusion lock every time a message is sent; this is
|
|
extremely slow. GNU's runtime, amazingly, sends messages just as fast
|
|
in thread-safe mode as it does in single-thread mode---the code path
|
|
does not contain even a single extra instruction! The GNU runtime only
|
|
needs locks when certainly structures are written, not read; the
|
|
structures are written relatively infrequently: only at class
|
|
initialization and when @samp{+poseAs:} is called.
|
|
|
|
@item GNU's runtime provides ``selector-types'' along with each
|
|
selector; NeXT's does not. A selector-type is a string that describes
|
|
the C variable types for the method's return and argument values. Among
|
|
other uses, selector-types is extrememly helpful for fast distributed
|
|
objects implementations, (see GNUstep Base Library Section, below).
|
|
|
|
@item Many of the GNU functions have different names than their
|
|
corresponding NeXT functions; the GNU names conform to the GNU coding
|
|
standards.
|
|
|
|
@item NeXT's compiler, @samp{cc}, is based on an old version of
|
|
@samp{gcc}. GNU's compiler is, of course, the latest version of
|
|
@samp{gcc}, and therefore contains all the latest enhancements.
|
|
|
|
@end itemize
|
|
|
|
@node Does it allow a mixture of Objective C and C++, Where can I find more information?, What is the Objective C Runtime Library?, GNU Objective C Compiler and Objective C Runtime Library
|
|
@subsection Does it allow a mixture of Objective C and C++?
|
|
|
|
No. Unlike NeXT's @samp{cc}, GNU GCC does not support source files
|
|
containing both Objective C and C++. Apple seems to be willing to
|
|
merge their code back into the main GCC project, but this may take some
|
|
convincing of the GCC maintainers due to the large number of changes
|
|
necessary. Send
|
|
email to @samp{discuss-gnustep@@gnu.org} if you are interesting in
|
|
pushing this issue, so that the efforts of all those people interested
|
|
can be coordinated.
|
|
|
|
Also, unlike NeXT's @samp{cc}, GNU GCC does not support the @samp{extern
|
|
"Objective-C"} construct.
|
|
|
|
@node Where can I find more information?, , Does it allow a mixture of Objective C and C++, GNU Objective C Compiler and Objective C Runtime Library
|
|
@subsection Where can I find more information?
|
|
|
|
The FAQ associated with the newsgroup @samp{comp.lang.objective-c}
|
|
contains more information about GNU Objective C.
|
|
|
|
@c ------------- GNU Compiler and Objective C Runtime Library -------
|
|
|
|
@node GNUstep Base Library, GNUstep GUI Library, GNU Objective C Compiler and Objective C Runtime Library, Top
|
|
@section GNUstep Base Library
|
|
|
|
@menu
|
|
* What is the GNUstep Base Library?::
|
|
* What is base's current state of development?::
|
|
* What are the features of GNU Distributed Objects?::
|
|
@end menu
|
|
|
|
@node What is the GNUstep Base Library?, What is base's current state of development?, GNUstep Base Library, GNUstep Base Library
|
|
@subsection What is the GNUstep Base Library?
|
|
|
|
The GNUstep Base Library is a library of general-purpose, non-graphical
|
|
Objective C objects. For example, it includes classes for strings,
|
|
object collections, byte streams, typed coders, invocations,
|
|
notifications, notification dispatchers, moments in time, network ports,
|
|
remote object messaging support (distributed objects), event loops, and
|
|
random number generators.
|
|
|
|
It provides functionality that aims to implement the non-graphical
|
|
portion of the OpenStep standard (the Foundation library).
|
|
|
|
@node What is base's current state of development?, What are the features of GNU Distributed Objects?, What is the GNUstep Base Library?, GNUstep Base Library
|
|
@subsection What is its current state of development?
|
|
|
|
GNUstep base is currently stable and implements probably 99% of the
|
|
functionality of the OpenStep classes and most all of the new Carbon
|
|
classes.
|
|
Normal work can already be done using the library since the
|
|
missing 1 percent are the least-often-used features or are simply not
|
|
up to date with the latest Carbon spec.
|
|
|
|
@node What are the features of GNU Distributed Objects?, , What is base's current state of development?, GNUstep Base Library
|
|
@subsection What are the features of GNU Distributed Objects?
|
|
|
|
GNU Distributed Objects has many of the features of other distributed
|
|
objects implementations, but, since it is free software, it can be
|
|
ported to platforms for which other distributed objects implementations
|
|
are not available.
|
|
|
|
[NOTE: The GNU distributed object facilities have the same ease-of-use
|
|
as NeXT's; be warned, however, that they are not compatible with each
|
|
other. They have different class heirarchies, different instance
|
|
variables, different method names, different implementation strategies
|
|
and different network message formats. You cannot communicate with a
|
|
NeXT NSConnection using a GNU Connection.
|
|
|
|
Here are some differences between GNU distributed objects and NeXT's
|
|
distributed objects: NeXT NSDistantObject asks it's remote
|
|
target for the method encoding types and caches the results; GNU
|
|
NSDistantObject gets the types directly from the local GNU "typed selector"
|
|
mechanism if the information is known locally and only queries the remote
|
|
target or caching encoding types when using a method that is not known to
|
|
the local process. The NSProxy for the remote root object always has name 0
|
|
and, once set, you cannot change the root object of a NSConnection; the GNU
|
|
Proxy for the remote root object has a target address value just like
|
|
all other Proxy's, and you can change the root object as many times as
|
|
you like. ].
|
|
|
|
@c --------------------------GNUstep Base Library----------------------
|
|
|
|
@node GNUstep GUI Library, GNUstep DisplayGhostScript Server, GNUstep Base Library, Top
|
|
@section GNUstep GUI Library
|
|
|
|
@menu
|
|
* What is the GUI Library?::
|
|
* Explain the organization of the front- and back-ends::
|
|
* What is the current state of development of the front-end?::
|
|
* What is the current state of development of the X/DPS back-end?::
|
|
@end menu
|
|
|
|
@node What is the GUI Library?, Explain the organization of the front- and back-ends, GNUstep GUI Library, GNUstep GUI Library
|
|
@subsection What is the GUI Library?
|
|
|
|
The GNUstep GUI Library is a library of objects useful for writing
|
|
graphical applications. For example, it includes classes for drawing
|
|
and manipulating graphics objects on the screen: windows, menus,
|
|
buttons, sliders, text fields, and events. There are also many
|
|
peripheral classes that offer operating-system-independent interfaces to
|
|
images, cursors, colors, fonts, pasteboards, printing. There are also
|
|
workspace support classes such as data links, open/save panels,
|
|
context-dependent help, spell checking.
|
|
|
|
It provides functionality that aims to implement the @samp{AppKit}
|
|
portion of the OpenStep standard. However the implementation has
|
|
been written to take advantage of GNUstep enhancements wherever possible.
|
|
|
|
|
|
@node Explain the organization of the front- and back-ends, What is the current state of development of the front-end?, What is the GUI Library?, GNUstep GUI Library
|
|
@subsection Explain the organization of the front- and back-ends
|
|
|
|
The GNUstep GUI Library is divided into a front- and back-end. The
|
|
front-end contains the majority of implementation, but leaves out the
|
|
low-level drawing and event code. A back-end can override whatever
|
|
methods necessary in order to implement low-level drawing event
|
|
receiving. Different back-ends will make GNUstep available on various
|
|
platforms. The default GNU back-end will run on top of X Windows and
|
|
the DisplayGhostScript Server. Other back-ends could allow GNUstep to
|
|
run on OpenGL, OS/2, and WIN32 graphics/event platforms. Much work
|
|
will be saved by this clean separation between front- and back-end,
|
|
because it allows different platforms to share the large amount of
|
|
front-end code.
|
|
|
|
@node What is the current state of development of the front-end?, What is the current state of development of the X/DPS back-end?, Explain the organization of the front- and back-ends, GNUstep GUI Library
|
|
@subsection What is the current state of development of the front-end?
|
|
|
|
Many of the classes are well implemented, if not thouroughly tested.
|
|
See the GNUstep web sites and read status information contained in the
|
|
distribution for the most up-to-date information.
|
|
|
|
@node What is the current state of development of the X/DPS back-end?, , What is the current state of development of the front-end?, GNUstep GUI Library
|
|
@subsection What is the current state of development of the X/DPS back-end?
|
|
|
|
It works, but is slow and buggy. A lot of work could be done.
|
|
|
|
@c ------------------------- GNUstep GUI Library -----------------------
|
|
|
|
@node GNUstep DisplayGhostScript Server, , GNUstep GUI Library, Top
|
|
@section GNUstep DisplayGhostScript Server
|
|
|
|
@menu
|
|
* What is the Display Ghostscript Server?::
|
|
* What is DGSs current state of development?::
|
|
* What is the relationship between the Display Ghostscript Server and X Windows?::
|
|
@end menu
|
|
|
|
@node What is the Display Ghostscript Server?, What is DGSs current state of development?, GNUstep DisplayGhostScript Server, GNUstep DisplayGhostScript Server
|
|
@subsection What is the Display Ghostscript Server?
|
|
|
|
It is a free implementation of a Display PostScript server based on the
|
|
GNU Ghostscript program developed by Aladdin Enterprises and now owned by artofcode LLC.
|
|
|
|
@node What is DGSs current state of development?, What is the relationship between the Display Ghostscript Server and X Windows?, What is the Display Ghostscript Server?, GNUstep DisplayGhostScript Server
|
|
@subsection What is its current state of development?
|
|
|
|
GNU contracted with Aladdin Enterprises to add some key features to GNU
|
|
Ghostscript so it could be used as a DPS server. This work has mostly
|
|
been done, although Aladdin did not completely finish the work that they
|
|
were contracted for. (Because the work took longer than specified and
|
|
was not completed, Aladdin agreed to waive approximately $10,000 in
|
|
promised fees for the work that was actually done and delivered.) DGS
|
|
works fairly well with a single context. Alpha channel and compositing
|
|
currently doesn't work.
|
|
|
|
@node What is the relationship between the Display Ghostscript Server and X Windows?, , What is DGSs current state of development?, GNUstep DisplayGhostScript Server
|
|
@subsection What is the relationship between the Display Ghostscript Server and X Windows?
|
|
|
|
Display Ghostscript runs on top of X Windows.
|
|
|
|
@c ------------------ GNUstep DisplayGhostScript Server ---------------
|
|
|
|
@format
|
|
All trademarks mentioned on in this FAQ belong to their owners.
|
|
@end format
|
|
|
|
@bye
|
|
\bye
|