mGSTEP
 
F A Q    |    Notes    |    Progress    |    Projects    |    Home   
 
Frequently Asked Questions

Should you have any questions, patches, bug reports or comments regarding mGSTEP please feel free to email me. You can also post questions on the Freshmeat site.

   - Felipe A. Rodriguez

What other libs are required?
libtiff ... tiff-v3.6.1 or better
libavcall ... ffcall-1.6 or better

Some of the example applications require:
libjpeg ... jpeg-6b or better
libgif ... giflib-4.1.0 or better
libpng ... libpng-1.0.3 or better

Additionally, mGSTEP 0.555 and up require:
libfreetype ... Freetype 2.1.10 or better (and ideally some TrueType fonts)
Xrender ... XFree86 4.5 or better

What tools are needed to build mGSTEP?
BASH is recommended.
GNU Make 3.77 or newer.
GCC with Objective-C support (gcc-3.x versions or newer are recommended)

I get "NXConstantString does not recognize characterAtIndex:" errors when I try to run the examples.
On some Linux distributions the GCC Objective-C runtime's version of NXConstantString gets linked in as the default constant string class. To get around this go into Makefiles/configs/Linux-* and enable the two CFLAGS lines below before you configure and build mGSTEP.
CFLAGS := $(CFLAGS) -DNXConstantString=NSConstantString
CFLAGS := $(CFLAGS) -fconstant-string-class=NSConstantString

What is Objective-C?
Objective-C is a C derived Object Oriented programming language. It's relatively simple to learn once you know C. In practice it tends to be much more powerful than C++ because it's a dynamic language. And unlike Java it provides this without the performance hit and footprint of a Virtual Machine.

Why not use GNU autoconf? How do you add support for another platform?
With Autoconf you never really know what you're going to get. Simply building interdependent components out of order can produce very different results. In the embedded space this is generally not acceptable. The configuration utility employed by the Linux kernel is more or less what is required. An additional requirement is that projects dependent on the mGSTEP libraries should leverage the one time package configuration. The existing Makefiles build system implements some of this.

Is it possible to share the same application source code between mGSTEP and Cocoa?
The short answer is YES. But it may depend on the application. In a simple case like the AppKit's tableview example app the only difference between the mGSTEP version and the Cocoa/OS X version is that Cocoa's implementation of the NSApplicationMain() function sends a "-sharedApplication" message to the app's principal class while mGSTEP's version merely creates an instance of the principal class. A proper XML Info.plist within the app wrapper would probably fix this. Another area where issues arise is in the Menus. mGSTEP employs vertical OPENSTEP style Menus while OS X/Cocoa utilize Apple's menu bar style. In mGSTEP 0.532 and up the menu creation code in AppKit/Testing/Controller.m employs a simple solution which allows the Menu code to be shared. Other significant issues may arise because mGSTEP only implements a subset of Cocoa.

How is mGSTEP related to QuantumSTEP (myStep\myPDA)?
mGSTEP is a core component of QuantumSTEP. QuantumSTEP contains many additions as a result of its focus on creating a Cocoa compatible PDA environment that leverages the Mac OS X development tools. There are also numerous differences such as the menu code where QuantumSTEP is more compatible with Cocoa than mGSTEP.

How is mGSTEP related to GNUstep and libFoundation?
Years ago I was the principal developer of the GNUstep AppKit. I was probably the third person to take on the role. My predecessors took the project from creation to where you could kind of build a "Hello World" application. I began developing the GNUstep AppKit after it had been abandoned for some time, but as the AppKit became viable disagreements arose among the developers. Some of the disagreements were fundamental in that many of the other developers wanted to create 'The Linux desktop' while I wanted an AppKit suitable for embedded development. I also found myself spending a considerable amount of time just managing the code others were submitting. Given that I really could not control the quality, performance or direction I made the decision to fork.

I grabbed portions of libFoundation for mGSTEP because at the time much of the GNUstep Base (Foundation) code was not very pretty and relied heavily on things like 'behavior' classes which provided an element of multiple inheritance. After years of independent development including the introduction of many new classes any relationship to either of these projects is probably difficult to see in much of the code.

How is its goal different from GNUstep?
When I last checked GNUstep was still focused on creating the GNU Linux Desktop. mGSTEP is focused on being useful in embedded applications so the focus is instead on memory footprint, performance and stability which take precedence over implementing obscure Cocoa classes. Unnecessary legacy code is also not usually kept around. There is some overlap and mGSTEP does contain desktop application examples which help to prove the libraries.

Why don't you just go and work on GNUstep?
A successful Open Source project must be useful to its developer. Primarily, I need something useful in embedded development. I've also never really been convinced that a successful Open Source *STEP desktop was realistic. Beyond the simple issue of convincing Qt, GTK ...etc developers to use another toolkit there is also the reality that Apple and even Microsoft will at some point be forced to support Linux if existing trends continue. And so to my mind it's a foregone conclusion which desktop will matter.

How is its completion state and stability?
That depends on how you define completion. mGSTEP is not trying to implement every Cocoa class. The core elements are the primary goal with an eye towards maintaining performance and stability in these. mGSTEP is far enough along that I can't imagine any application that could not be written using it. But there are a number of mostly non-core GUI elements such as the Color and Print panels that are incomplete. In a typical embedded application this is probably not a big deal.