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