1 |
\input texinfo @c -*-texinfo-*- |
2 |
@c A FAQ for GNUstep |
3 |
|
4 |
@node Top, Compatibility, (dir), (dir) |
5 |
@chapter GNUstep Frequently Asked Questions with Answers |
6 |
|
7 |
Last updated @today{}. |
8 |
Please send corrections to @email{gnustep-maintainer@@gnu.org}. Also look |
9 |
at the user FAQ for more user oriented questions. |
10 |
|
11 |
@menu |
12 |
* Compatibility:: |
13 |
* Compiling and Developing:: |
14 |
* GNU Objective C Compiler and Runtime:: |
15 |
* GNUstep Base Library:: |
16 |
* GNUstep GUI Library:: |
17 |
* GNUstep DisplayGhostScript Server:: |
18 |
@end menu |
19 |
|
20 |
@c **************************************************************** |
21 |
@c Compiling |
22 |
@node Compatibility, Compiling and Developing, Top, Top |
23 |
@section Compatibility |
24 |
|
25 |
@menu |
26 |
* Is it easy to port OPENSTEP programs to GNUstep?:: |
27 |
* How about porting between Cocoa and GNUstep?:: |
28 |
* Tools for porting:: |
29 |
* Can I transfer archived data from GNUstep to Cocoa?:: |
30 |
* Does distributed objects work between GNUstep and Cocoa?:: |
31 |
* Is there an Interface Builder for GNUstep?:: |
32 |
* Can I use my original NIB files?:: |
33 |
* Can one use the hybrid "Objective-C++":: |
34 |
* Is there a plan to support Java/YellowBox Bindings?:: |
35 |
* What if I compile GNUstep under OPENSTEP/MacOS X?:: |
36 |
* Is the Objective C API for GTK related?:: |
37 |
* How about implementing parts of the Application Kit with GTK?:: |
38 |
@end menu |
39 |
|
40 |
@node Is it easy to port OPENSTEP programs to GNUstep?, How about porting between Cocoa and GNUstep?, Compatibility, Compatibility |
41 |
@subsection Is it easy to port OPENSTEP programs to GNUstep? |
42 |
|
43 |
It is probably easy for simple programs. There are some portability |
44 |
tools to make this easier, or rewrite |
45 |
the Makefiles yourself. You will also have to translate the NIB files |
46 |
(if there are any) to GNUstep model files using the nib2gmodel program |
47 |
(from @url{ftp://ftp.gnustep.org/pub/gnustep/dev-apps}). |
48 |
|
49 |
@node How about porting between Cocoa and GNUstep?, Tools for porting, Is it easy to port OPENSTEP programs to GNUstep?, Compatibility |
50 |
@subsection How about porting between Cocoa and GNUstep? |
51 |
|
52 |
It's easier from GNUstep to Cocoa than Cocoa to GNUstep. Cocoa is |
53 |
constantly changing, much faster than GNUstep could hope to keep |
54 |
up. They have added extensions and new classes that aren't available in |
55 |
GNUstep yet. Plus there are some other issues. If you start with |
56 |
Cocoa: |
57 |
|
58 |
@itemize @bullet |
59 |
@item Be careful with Cocoa.h includes (Use #ifndef GNUSTEP, for instance) |
60 |
@item Do not use CoreFoundation |
61 |
@item Do not use Objective-C++ |
62 |
@item Do not use Quicktime or other proprietary extension |
63 |
@item You need to convert .nib files (see next question @pxref(Tools for porting)) |
64 |
@item Some unfinished classes include NSToolBar and Drawers. |
65 |
@end itemize |
66 |
|
67 |
@node Tools for porting, Can I transfer archived data from GNUstep to Cocoa?, How about porting between Cocoa and GNUstep?, Compatibility |
68 |
@subsection Tools for porting |
69 |
|
70 |
While the programming interface should be almost transparent between |
71 |
systems (expect for the unimplemented parts, of course), there are a |
72 |
variety of other files and tools that are necessary for porting |
73 |
programs. |
74 |
|
75 |
@table @samp |
76 |
@item ni2gmodel |
77 |
This program coverts nib files from any system, such as Cocoa or OPENSTEP to |
78 |
a gmodel format file. Gmodel can be read directly by GNUstep or you can |
79 |
convert this to a more GNUstep-native gorm format (using the Gorm interface |
80 |
modeller). |
81 |
|
82 |
@item Renaissance |
83 |
GNUstep Renaissance allows you to describe your user |
84 |
interfaces (that is, the windows in your application, and the buttons, |
85 |
boxes, textfields, etc in the windows) in simple and intuitive XML |
86 |
files, using an open, standard format describing the logic of the |
87 |
interface. It has a number of advantages over the proprietary nib format: |
88 |
portability, open standard, easy localization, themeability, and |
89 |
intelligent autolayout. |
90 |
|
91 |
@item OpenStep2GNUConverter and nfmake |
92 |
Two programs that allow you to convert PB files to GNUstep makefiles or |
93 |
compile a program on GNUstep directly from PB files. They probably work |
94 |
only for OPENSTEP systems and are a little out-of-date. |
95 |
|
96 |
@item StepTalk |
97 |
A portable scripting environment that lets your do scripting in almost |
98 |
any language you like. |
99 |
|
100 |
@end table |
101 |
|
102 |
@node Can I transfer archived data from GNUstep to Cocoa?, Does distributed objects work between GNUstep and Cocoa?, Tools for porting, Compatibility |
103 |
@subsection Can I transfer archived data from GNUstep to Cocoa? |
104 |
|
105 |
Apple's archiving format is proprietary and not documented, so this |
106 |
poses a problem for anyone wanting to implement compatibility with it. |
107 |
However, even if we reverse engineered the format, there are enough |
108 |
differences between the class and ivar layouts to make this sort of |
109 |
compatibility difficult. Not to mention the fact that we would |
110 |
constantly have to keep up with the changes Apple made. Also Apple's |
111 |
archiving format, as far as we know, would not be compatible between |
112 |
different machines because of endiness issues, although GNUstep doesn't |
113 |
have this problem. |
114 |
|
115 |
Your best bet is to implement your own archiving format that would work |
116 |
both with GNUstep and Cocoa. Fortunately, you don't have to start from |
117 |
scratch, since this has been essentially done for you in the nib2gmodel |
118 |
tool, which has an archiver that works both on GNUstep and Cocoa. It |
119 |
might be nice to split this off into a separate project to make it |
120 |
easier for other people to do the same thing. |
121 |
|
122 |
@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 |
123 |
@subsection Does distributed objects work between GNUstep and Cocoa? |
124 |
|
125 |
See the answer to the previous question (on archive compatibility) for |
126 |
why this won't work either. |
127 |
|
128 |
@node Is there an Interface Builder for GNUstep?, Can I use my original NIB files?, Does distributed objects work between GNUstep and Cocoa?, Compatibility |
129 |
@subsection Is there an Interface Builder for GNUstep? |
130 |
|
131 |
There is an Interface Builder for GNUstep called Gorm, but it is |
132 |
in alpha release, so it may not work perfectly. You can download it from |
133 |
the ftp site or via http. |
134 |
The Project Manager ProjectCenter is also available. |
135 |
|
136 |
@node Can I use my original NIB files?, Can one use the hybrid "Objective-C++", Is there an Interface Builder for GNUstep?, Compatibility |
137 |
@subsection Can I use my original NIB files? |
138 |
|
139 |
No - NeXT/Apple never documented their nib format, so GNUstep supports |
140 |
both the 'gmodel' format (which stores information as text |
141 |
(property-lists) and can therefore be edited 'by hand') and binary |
142 |
archive format (which can be edited by Gorm). There IS a conversion |
143 |
tool called nib2gmodel that can be compiled under OPENSTEP to convert |
144 |
nib files to GNUstep gmodel files. |
145 |
|
146 |
@node Can one use the hybrid "Objective-C++", Is there a plan to support Java/YellowBox Bindings?, Can I use my original NIB files?, Compatibility |
147 |
@subsection Can one use the hybrid "Objective-C++" |
148 |
|
149 |
No. at present the GNU compiler (gcc) does not support |
150 |
"Objective-C++". Apple is interested in adding back their implementation |
151 |
to gcc and is slowly adding parts of it to the mainline gcc implementation. |
152 |
|
153 |
@node Is there a plan to support Java/YellowBox Bindings?, What if I compile GNUstep under OPENSTEP/MacOS X?, Can one use the hybrid "Objective-C++", Compatibility |
154 |
@subsection Is there a plan to support the Java/YellowBox Bindings? |
155 |
|
156 |
Yes. The GNustep Java library/bridge called JIGS is available now. JIGS |
157 |
is a free (LGPL) Java Interface for GNUstep; it can automatically wrap |
158 |
Objective-C libraries based on GNUstep, making them accessible directly |
159 |
to the Java programmer as if they were Java libraries. As a side effect, |
160 |
it is also possible to use the whole engine in the reverse way: JIGS |
161 |
provides a high level API to allow Objective-C programmers to start java |
162 |
virtual machines inside GNUstep Objective-C code and access java objects |
163 |
in the java virtual machine transparently, as if they were objective-C |
164 |
objects. |
165 |
|
166 |
@node What if I compile GNUstep under OPENSTEP/MacOS X?, Is the Objective C API for GTK related?, Is there a plan to support Java/YellowBox Bindings?, Compatibility |
167 |
@subsection What if I compile GNUstep under OPENSTEP/MacOS X? |
168 |
|
169 |
GNUstep uses the X-windows display postscript extension. |
170 |
The interface to that is not the same as the interface to the |
171 |
OPENSTEP/MacOS-X windows server. While someone could write a |
172 |
backend library to provide the interface, nobody has bothered to |
173 |
date. |
174 |
|
175 |
You should, however, be able to use a GNUstep program with an X11 server |
176 |
running on MacOSX. |
177 |
|
178 |
@node Is the Objective C API for GTK related?, How about implementing parts of the Application Kit with GTK?, What if I compile GNUstep under OPENSTEP/MacOS X?, Compatibility |
179 |
@subsection Is the Objective C API for GTK related? |
180 |
|
181 |
No. GNUstep applications provide their GUI via the OpenStep |
182 |
API, which provides fully object-oriented access to GUI manipulation. |
183 |
|
184 |
The object-oriented nature of the libraries and language make it much easier |
185 |
for new users to create their own subclasses rather than simply using the |
186 |
supplied widgets as in other frameworks. |
187 |
|
188 |
@node How about implementing parts of the Application Kit with GTK?, , Is the Objective C API for GTK related?, Compatibility |
189 |
@subsection How about implementing parts of the Application Kit with GTK? |
190 |
|
191 |
Yes and No - The GNUstep architecture provides a single, |
192 |
platform-independent, API for handling all aspects of GUI interaction |
193 |
(implemented in the gstep-gui library), with a backend architecture |
194 |
that permits you to have different display models (display postscript, |
195 |
X-windows, win32, berlin ...) while letting you use the same code |
196 |
for printing as for displaying. Use of GTK in the frontend gui |
197 |
library would remove some of those advantages without adding any. |
198 |
|
199 |
That being said, a backend library could be implemented using gtk |
200 |
if anyone wanted to do so. Since the frontend library handles most |
201 |
of the work involved in implementing the OpenStep API, the backend |
202 |
is a relatively thin layer and the advantages of GTK over direct |
203 |
xlib or win32 calls is likely to be minimal. If/when GTK is ported |
204 |
to more systems, a backend written using it could be a valuable |
205 |
asset - volunteers are, as always, welcome. |
206 |
|
207 |
|
208 |
@c **************************************************************** |
209 |
@c Compiling |
210 |
@node Compiling and Developing, GNU Objective C Compiler and Runtime, Compatibility, Top |
211 |
@section Compiling and Developing |
212 |
|
213 |
@menu |
214 |
* How can I get started programming?:: |
215 |
* How can I help with GNUstep?:: |
216 |
* Helping develop GNUstep:: |
217 |
* Helping document GNUstep:: |
218 |
* How do I update the task list?:: |
219 |
* How do I start writing tests?:: |
220 |
* How do I start writing applications?:: |
221 |
* How can I help with the GNUstep website?:: |
222 |
* Why doesn't GDB support Objective-C?:: |
223 |
@end menu |
224 |
|
225 |
@node How can I get started programming?, How can I help with GNUstep?, Compiling and Developing, Compiling and Developing |
226 |
@subsection How can I get started programming? |
227 |
|
228 |
Good question. Read the tutorials at the GNUstep web site. Also look at |
229 |
Apple's documentation (pointers in the Resources section on the GNUstep web |
230 |
site.) |
231 |
|
232 |
@node How can I help with GNUstep?, Helping develop GNUstep, How can I get started programming?, Compiling and Developing |
233 |
@subsection How can I help with GNUstep? |
234 |
|
235 |
@enumerate |
236 |
@item Write/debug library code |
237 |
@item Write documentation |
238 |
@item Update the task list and library headers |
239 |
@item Write applications |
240 |
@end enumerate |
241 |
|
242 |
Let people know what you are doing. Break your project up into |
243 |
the smallest units you can. Feed back frequent updates to the |
244 |
maintainers. Ask questions in the discussion mailing list. |
245 |
|
246 |
Do remember that any changes beyond a few lines of code (or |
247 |
documentation) require a disclaimer or copyright assignment to the |
248 |
Free Software Foundation before they can be incorporated into the |
249 |
project. Get in touch with the maintainer of the library you are |
250 |
working on about this. |
251 |
|
252 |
Don't start with large-scale reorganization of anything - instead, |
253 |
get a general idea in mind of what you want to do, and proceed as |
254 |
much as possible with incremental changes that don't break anything |
255 |
- that way you can make those incremental changes available to the |
256 |
rest of the community at frequent intervals. |
257 |
|
258 |
Don't be afraid to give up - there is no shame in finding out that |
259 |
you have take on too large/complex a project. It's much better to |
260 |
'resign' and take on a smaller job than to just stop without telling |
261 |
anyone. |
262 |
|
263 |
Please document the code you add or change (using autogsdoc comments |
264 |
that begin with a slash and two asterices). But PLEASE, do not copy from |
265 |
the Apple documentation or any other copyrighted documentation. |
266 |
|
267 |
|
268 |
@node Helping develop GNUstep, Helping document GNUstep, How can I help with GNUstep?, Compiling and Developing |
269 |
@subsection Helping develop GNUstep |
270 |
|
271 |
There is plenty of unimplemented stuff in the gui library and |
272 |
backend libraries that volunteers can work on - just browse through |
273 |
the code and see if it conforms to the documentation. |
274 |
|
275 |
Specific tasks are noted in the developers section on the GNUstep |
276 |
website. |
277 |
|
278 |
Once you have coded something, you could always write a testcase |
279 |
and documentation for it :-) |
280 |
|
281 |
@node Helping document GNUstep, How do I update the task list?, Helping develop GNUstep, Compiling and Developing |
282 |
@subsection Helping document GNUstep |
283 |
|
284 |
All class documentation is written directly in the source code itself |
285 |
and translated using the autogsdoc program. See the source code and |
286 |
documentation for autogsdoc for information on documenting the classes. |
287 |
|
288 |
Newcomers could write documentation for individual classes by |
289 |
comparing the OpenStep specification, the MacOS-X documentation, |
290 |
and the GNUstep source. Documentation should clearly note where |
291 |
individual methods are specific to OpenStep, MacOS-X or are GNustep |
292 |
extensions. |
293 |
|
294 |
More experienced people could write documentation on general |
295 |
programming topics, and tutorials for new users. |
296 |
|
297 |
Anyone willing to write documentation, either tutorials for using |
298 |
GNUstep, or reference documentation for individual classes, should |
299 |
either write it in gsdoc or as plain ascii text for someone else to |
300 |
format into gsdoc. |
301 |
|
302 |
GNUstep documentation should have copyright assigned to the Free |
303 |
Software Foundation. |
304 |
|
305 |
@node How do I update the task list?, How do I start writing tests?, Helping document GNUstep, Compiling and Developing |
306 |
@subsection How do I update the task list? |
307 |
|
308 |
The task list (@url{http://savannah.gnu.org/pm/?group_id=99}) is |
309 |
supposed to tell people what jobs are waiting to be done. Feel free to |
310 |
add to it or update the tasks that are there (you need to create a login |
311 |
for yourself first). |
312 |
|
313 |
One job of major importance that pretty much anyone can do is to |
314 |
look for jobs to add to the task list. In the case of methods from |
315 |
the OpenStep specification or the MacOS-X documentation not being |
316 |
present in the GNUstep libraries, it is also helpful to add the |
317 |
method prototypes to the library header files. |
318 |
|
319 |
Send any changes or additions to @email{bug-gnustep@@gnu.org}. |
320 |
|
321 |
A beginner can look through the MacOS-X documentation, the OpenStep |
322 |
specification and the GNUstep source and contribute task items. |
323 |
|
324 |
If a class or method is in MacOS-X and OpenStep but is not in |
325 |
GNUstep - it's a high priority TODO and should at least be added |
326 |
to the GNUstep headers and a dummy version added to the source with |
327 |
a FIXME comment. |
328 |
|
329 |
If a class or method is in MacOS-X but not OpenStep or GNUstep - |
330 |
it's a low priority TODO. It should be added to the GNUstep headers |
331 |
bracketed in @code{#ifndef STRICT_OPENSTEP} |
332 |
|
333 |
If a class or method is in OpenStep but not in MacOS-X or GNUstep |
334 |
- it's a low priority TODO. It should be added to the GNUstep |
335 |
headers bracketed in @code{#ifndef STRICT_MACOS_X} |
336 |
|
337 |
There are a couple of people working on this already, so it's a |
338 |
good idea to get in touch with Adam or Richard to coordinate efforts. |
339 |
|
340 |
@node How do I start writing tests?, How do I start writing applications?, How do I update the task list?, Compiling and Developing |
341 |
@subsection How do I start writing tests? |
342 |
|
343 |
You can write testcases - where the libraries fail tests, you |
344 |
could either fix the problem, or add it to the task list. |
345 |
|
346 |
To write testcases, you need to use anonymous CVS to install the |
347 |
latest GNUstep snapshots you can find. Then checkout the 'tests' |
348 |
module from CVS. In the 'tests' directory, you will find a |
349 |
regression testing framework. |
350 |
In order to use this you will also need a recent (v 1.3.2 or later) copy of |
351 |
Guile (you can get this from a GNU ftp site) and will need to check-out, |
352 |
built, and installed the 'guile' package from the GNUstep CVS repository. |
353 |
|
354 |
@node How do I start writing applications?, How can I help with the GNUstep website?, How do I start writing tests?, Compiling and Developing |
355 |
@subsection How do I start writing applications? |
356 |
|
357 |
You can either look at the links on the GNUstep website for |
358 |
applications that have been started, and email their owners to |
359 |
volunteer to help, or you can start your own project. |
360 |
|
361 |
@node How can I help with the GNUstep website?, Why doesn't GDB support Objective-C?, How do I start writing applications?, Compiling and Developing |
362 |
@subsection How can I help with the GNUstep website? |
363 |
|
364 |
Talk to Adam Fedor @email{fedor@@gnu.org}, the maintainer. |
365 |
|
366 |
The GNUstep website is kept as a CVS module, but the largest portions |
367 |
of it (the FAQ and the Documentation) are actually |
368 |
generated from files in the individual GNUstep packages. |
369 |
|
370 |
If you want to update the FAQ or documentation - grab |
371 |
the latest snapshot of the GNUstep core you can find, update it |
372 |
from the CVS repository, and work with the contents of the appropriate |
373 |
documentation directory. |
374 |
|
375 |
If you want to work on other parts of the website, you can grab a copy |
376 |
of the website via anonymous CVS. See |
377 |
@url{http://savannah.gnu.org/cvs/?group_id=99} for instructions on how |
378 |
to do that. |
379 |
|
380 |
The main task with the website is to figure out which bits are |
381 |
out-of-date (or wrong) and update/mark-as-outdated as required. |
382 |
|
383 |
@node Why doesn't GDB support Objective-C?, , How can I help with the GNUstep website?, Compiling and Developing |
384 |
@subsection Why doesn't GDB support Objective-C? |
385 |
|
386 |
Update: GDB 6.0, which should come out sometime in September 2003 |
387 |
supports debugging of Objective-C code. |
388 |
|
389 |
There are patches available on the gnustep web site for earlier versions |
390 |
of gdb (see @url{ftp://ftp.gnustep.org/pub/gnustep/patches}). |
391 |
|
392 |
|
393 |
@c ------------------------------------------------------------------- |
394 |
|
395 |
@node GNU Objective C Compiler and Runtime, GNUstep Base Library, Compiling and Developing, Top |
396 |
@section GNU Objective C Compiler and Runtime |
397 |
|
398 |
@menu |
399 |
* What is the Objective C Runtime?:: |
400 |
* Does it allow a mixture of Objective C and C++:: |
401 |
* Where can I find more information?:: |
402 |
@end menu |
403 |
|
404 |
@node What is the Objective C Runtime?, Does it allow a mixture of Objective C and C++, GNU Objective C Compiler and Runtime, GNU Objective C Compiler and Runtime |
405 |
@subsection What is the Objective C Runtime? |
406 |
|
407 |
The Objective C Runtime Library provides C functions and data structures |
408 |
required to execute an Objective C program. |
409 |
|
410 |
The GNU Objective C Runtime Library offers everything NeXT's runtime |
411 |
does, including Categories, Protocols, @samp{+poseAs:}, thread-safety, |
412 |
class initialization on demand, delayed loading of classes, and |
413 |
initialization of static instances (such as @@""-style string objects). |
414 |
|
415 |
It also has several differences over NeXT's implementation: |
416 |
|
417 |
@itemize @bullet |
418 |
|
419 |
@item GNU's runtime provides ``selector-types'' along with each |
420 |
selector; NeXT's does not. A selector-type is a string that describes |
421 |
the C variable types for the method's return and argument values. Among |
422 |
other uses, selector-types is extremely helpful for fast distributed |
423 |
objects implementations, (see GNUstep Base Library Section, below). |
424 |
|
425 |
@item Many of the GNU functions have different names than their |
426 |
corresponding NeXT functions; the GNU names conform to the GNU coding |
427 |
standards. The GNUstep base library contains a compatibility header that |
428 |
works with both runtimes. You should use functions there or use OpenStep |
429 |
Foundation methods/functions instead of the basic |
430 |
runtime functions so that you code can run with either system. |
431 |
|
432 |
@end itemize |
433 |
|
434 |
@node Does it allow a mixture of Objective C and C++, Where can I find more information?, What is the Objective C Runtime?, GNU Objective C Compiler and Runtime |
435 |
@subsection Does it allow a mixture of Objective C and C++? |
436 |
|
437 |
No. |
438 |
See @pxref{Can one use the hybrid "Objective-C++"} |
439 |
|
440 |
@node Where can I find more information?, , Does it allow a mixture of Objective C and C++, GNU Objective C Compiler and Runtime |
441 |
@subsection Where can I find more information? |
442 |
|
443 |
The FAQ associated with the newsgroup @samp{comp.lang.objective-c} |
444 |
contains more information about GNU Objective C. |
445 |
|
446 |
@c ------------- GNU Compiler and Objective C Runtime Library ------- |
447 |
|
448 |
@node GNUstep Base Library, GNUstep GUI Library, GNU Objective C Compiler and Runtime, Top |
449 |
@section GNUstep Base Library |
450 |
|
451 |
@menu |
452 |
* What is the GNUstep Base Library?:: |
453 |
* What is base's current state of development?:: |
454 |
* What are the features of GNU Distributed Objects?:: |
455 |
@end menu |
456 |
|
457 |
@node What is the GNUstep Base Library?, What is base's current state of development?, GNUstep Base Library, GNUstep Base Library |
458 |
@subsection What is the GNUstep Base Library? |
459 |
|
460 |
The GNUstep Base Library is a library of general-purpose, non-graphical |
461 |
Objective C objects. For example, it includes classes for strings, |
462 |
object collections, byte streams, typed coders, invocations, |
463 |
notifications, notification dispatchers, moments in time, network ports, |
464 |
remote object messaging support (distributed objects), event loops, and |
465 |
random number generators. |
466 |
|
467 |
It provides functionality that aims to implement the non-graphical |
468 |
portion of the OpenStep standard (the Foundation library). |
469 |
|
470 |
@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 |
471 |
@subsection What is its current state of development? |
472 |
|
473 |
GNUstep base is currently stable and, to the best of our knowledge, |
474 |
implements all of the OpenStep functionality (except for a few classes |
475 |
that we feel are not useful). It also implements most all of the new |
476 |
Cocoa classes. However we do some things, like scripting, differently, |
477 |
so we don't implement all the Cocoa classes. |
478 |
|
479 |
@node What are the features of GNU Distributed Objects?, , What is base's current state of development?, GNUstep Base Library |
480 |
@subsection What are the features of GNU Distributed Objects? |
481 |
|
482 |
GNU Distributed Objects has many of the features of other distributed |
483 |
objects implementations, but, since it is free software, it can be |
484 |
ported to platforms for which other distributed objects implementations |
485 |
are not available. |
486 |
|
487 |
[NOTE: The GNU distributed object facilities have the same ease-of-use |
488 |
as NeXT's; be warned, however, that they are not compatible with each |
489 |
other. They have different class hierarchies, different instance |
490 |
variables, different method names, different implementation strategies |
491 |
and different network message formats. You cannot communicate with a |
492 |
NeXT NSConnection using a GNU NSConnection. |
493 |
|
494 |
Here are some differences between GNU distributed objects and NeXT's |
495 |
distributed objects: NeXT NSDistantObject asks it's remote |
496 |
target for the method encoding types and caches the results; GNU |
497 |
NSDistantObject gets the types directly from the local GNU "typed selector" |
498 |
mechanism if the information is known locally and only queries the remote |
499 |
target or caching encoding types when using a method that is not known to |
500 |
the local process. The NSProxy for the remote root object always has name 0 |
501 |
and, once set, you cannot change the root object of a NSConnection; the GNU |
502 |
Proxy for the remote root object has a target address value just like |
503 |
all other Proxy's, and you can change the root object as many times as |
504 |
you like. ]. |
505 |
|
506 |
@c --------------------------GNUstep Base Library---------------------- |
507 |
|
508 |
@node GNUstep GUI Library, GNUstep DisplayGhostScript Server, GNUstep Base Library, Top |
509 |
@section GNUstep GUI Library |
510 |
|
511 |
@menu |
512 |
* What is the GUI Library?:: |
513 |
* Explain the organization of the front- and back-ends:: |
514 |
* What is the current state of development of the front-end?:: |
515 |
* What is the current state of development of the back-ends?:: |
516 |
@end menu |
517 |
|
518 |
@node What is the GUI Library?, Explain the organization of the front- and back-ends, GNUstep GUI Library, GNUstep GUI Library |
519 |
@subsection What is the GUI Library? |
520 |
|
521 |
The GNUstep GUI Library is a library of objects useful for writing |
522 |
graphical applications. For example, it includes classes for drawing |
523 |
and manipulating graphics objects on the screen: windows, menus, |
524 |
buttons, sliders, text fields, and events. There are also many |
525 |
peripheral classes that offer operating-system-independent interfaces to |
526 |
images, cursors, colors, fonts, pasteboards, printing. There are also |
527 |
workspace support classes such as data links, open/save panels, |
528 |
context-dependent help, spell checking. |
529 |
|
530 |
It provides functionality that aims to implement the @samp{AppKit} |
531 |
portion of the OpenStep standard. However the implementation has |
532 |
been written to take advantage of GNUstep enhancements wherever possible. |
533 |
|
534 |
|
535 |
@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 |
536 |
@subsection Explain the organization of the front- and back-ends |
537 |
|
538 |
The GNUstep GUI Library is divided into a front- and back-end. The |
539 |
front-end contains the majority of implementation, but leaves out the |
540 |
low-level drawing and event code. A back-end can override whatever |
541 |
methods necessary in order to implement low-level drawing event |
542 |
receiving. Different back-ends will make GNUstep available on various |
543 |
platforms. The default GNU back-end will run on top of X Windows. |
544 |
Other back-ends could allow GNUstep to run on OpenGL and WIN32 |
545 |
graphics/event platforms. Much work will be saved by this clean |
546 |
separation between front- and back-end, because it allows different |
547 |
platforms to share the large amount of front-end code. |
548 |
|
549 |
@node What is the current state of development of the front-end?, What is the current state of development of the back-ends?, Explain the organization of the front- and back-ends, GNUstep GUI Library |
550 |
@subsection What is the current state of development of the front-end? |
551 |
|
552 |
Many of the classes are well implemented, if not thoroughly tested. |
553 |
See the GNUstep web sites and read status information contained in the |
554 |
distribution for the most up-to-date information. |
555 |
|
556 |
@node What is the current state of development of the back-ends?, , What is the current state of development of the front-end?, GNUstep GUI Library |
557 |
@subsection What is the current state of development of the back-ends? |
558 |
|
559 |
There are several backends currently available: |
560 |
|
561 |
@table @samp |
562 |
@item xlib |
563 |
This is the standard backend that runs on X11 and uses standard xlib |
564 |
calls for implementing drawing. It works well, but is limited in many |
565 |
areas due to the limitations of xlib drawing. |
566 |
@item art |
567 |
This is a very good backend that draws using the libart package and |
568 |
freetype with near PostScript quality and functionality. At some point |
569 |
it will become the standard. |
570 |
@item w32 |
571 |
This backend works on Windows and is currently very alpha quality. |
572 |
@end table |
573 |
|
574 |
@c ------------------------- GNUstep GUI Library ----------------------- |
575 |
|
576 |
@node GNUstep DisplayGhostScript Server, , GNUstep GUI Library, Top |
577 |
@section GNUstep DisplayGhostScript Server |
578 |
|
579 |
@menu |
580 |
* What is the Display Ghostscript Server?:: |
581 |
* What is DGSs current state of development?:: |
582 |
* What is the relationship between the Display Ghostscript Server and X Windows?:: |
583 |
@end menu |
584 |
|
585 |
@node What is the Display Ghostscript Server?, What is DGSs current state of development?, GNUstep DisplayGhostScript Server, GNUstep DisplayGhostScript Server |
586 |
@subsection What is the Display Ghostscript Server? |
587 |
|
588 |
It is a free implementation of a Display PostScript server based on the |
589 |
GNU Ghostscript program developed by Aladdin Enterprises and now owned by artofcode LLC. |
590 |
|
591 |
At one point, GNUstep was using this for display purposes. However the |
592 |
development of DGS has stopped as it is too difficult to maintain and |
593 |
no one wanted to work on it. Now we are using other means of drawing. |
594 |
|
595 |
@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 |
596 |
@subsection What is its current state of development? |
597 |
|
598 |
GNU contracted with Aladdin Enterprises to add some key features to GNU |
599 |
Ghostscript so it could be used as a DPS server. This work has mostly |
600 |
been done, although Aladdin did not completely finish the work that they |
601 |
were contracted for. (Because the work took longer than specified and |
602 |
was not completed, Aladdin agreed to waive approximately $10,000 in |
603 |
promised fees for the work that was actually done and delivered.) DGS |
604 |
works fairly well with a single context. Alpha channel and compositing |
605 |
currently doesn't work. |
606 |
|
607 |
@node What is the relationship between the Display Ghostscript Server and X Windows?, , What is DGSs current state of development?, GNUstep DisplayGhostScript Server |
608 |
@subsection What is the relationship between the Display Ghostscript Server and X Windows? |
609 |
|
610 |
Display Ghostscript runs on top of X Windows. |
611 |
|
612 |
@c ------------------ GNUstep DisplayGhostScript Server --------------- |
613 |
|
614 |
@bye |
615 |
\bye |