OPENSTEP Porting to Rhapsody
Volume Number: 13
Issue Number: 7
Column Tag: Rhapsody
Porting to Rhapsody PPC from OPENSTEP
by Andrew Stone, Chief Executive Haquer, Stone Design Corp.
Want your OPENSTEP application to run on more than one
platform? Apple is making it easy
In late 1995, when the future for NeXT Software, Inc. seemed rather bleak, the first
beta version of OPENSTEP 4.0 shipped to a few faithful developers. Faced with doing
Java development in incomplete environments, I decided to yet again recommit to
OPENSTEP and port our best selling drawing and design program, Create, which
contains the Stone Libraries upon which our other apps are based. In an effort to save
others from the pitfalls I fell into, I produced a porting guide
http://www.stone.com/porting/ documenting the likely gotchas of the process of
porting from NEXTSTEP to OPENSTEP.
It took me one month to port this 100,000 line code base to a state of linking and
limping. After 8 months of intense debugging and working back and forth between the
NT and MACH teams at NeXT and the SOLARIS OPENSTEP team at SUN Microsystems,
Create 4.0 rolled into beta, and was the first app to ship for OPENSTEP in the fall of
1996. Proving the claim of true cross platform compatibility, it ran on Windows 95
and Window NT, SOLARIS, and OPENSTEP MACH for Motorola, Intel and SPARC
architectures. Since the development and porting tools were just being debugged for
the first time and my OPENSTEP knowledge was still nascent, the process was
lengthier than a port from NEXTSTEP to OPENSTEP would be today. We shipped, and
were underwhelmed by the lack of response from a beleaguered set of OPENSTEP users.
Apple acquiring NeXT on December 20th, 1996 changed all of that, proving once again
that reality is far stranger than fiction. The Wheel turned full circle and the renegade
ex-Mac developers were back home!
'Tis true that perseverance furthers, because 2 weeks prior to the 1997 WWDC on
Cinco de Mayo, I was invited to NeXT Software's headquarters in Redwood City to build
Create for the PowerPC. Unlike any previous visit to NeXT where I was watched with
hawk-eye and not allowed to go anywhere unescorted, I was given full reign of the
second floor of engineering, replete with my own office and access to that legendary
espresso maker.
Two binaries were needed for the show: one for Rhapsody running on Intel, the other
for Rhapsody running on PowerPC. The app was also built to showcase Yellow Box
running on Windows with the Windows look and feel. This build compiled without
warning, the app launched and hung. It turns out that I had a vestigial line of code from
NEXTSTEP 1.0 circa 1989:
[menu display];
This was a workaround to get the menu to redraw after dynamically adding menu items.
However, in the brave new world of Rhapsody, one cannot be sure what a menu is.
Normally a menu is a subclass of NSView, which contains a display method. Under
Rhapsody, Apple's drop-down menu is not a subclass of NSView, and does not recognize
the display method.
The engineers at Apple/NeXT, in the midst of going through a total reorganization, had
ported the kernel and compiler tools to PPC within a matter of months. They had built
a cross-compiler to build PPC binaries from Intel machines, and once again, Create
compiled cleanly. The PPC kernel was only a few days old, still dripping with amniotic
fluid, when the first commercial app just came up and ran. As key team member Matt
Watson is oft heard saying, "It just works!" Shouts of joy from the team could be heard
throughout the building.
True to the promise of Rhapsody, no coding changes were required for the PPC/Yellow
Box port, a few NeXT Interface Builder files (nibs) had to be adjusted to be more
Mac-like -- mainly Create's main menu had to have its menu items reordered and
renamed slightly to feel like a Mac. To solve this problem, a new interface loading
paradigm was introduced: if a nib file has a platform suffix, that nib file is loaded
instead of the one without a suffix:
NEXTSTEP look as provided by _NEXTSTEP___-nextstep.nib
Macintosh look as provided by _Macintosh:__-macintosh.nib
Windows look as provided by _Windows NT/95_-windows.nib
The Mac and Windows NT/95 menus use a separation marker that you can find on the
Menu palette of IB when you set the "Interface Style" in Interface Builder's
Preferences (General) to "OPENSTEP for Windows." The separation marker must be
disabled in the IB inspector to give it the light gray look. Menu organization and menu
item naming should follow the User Interface guidelines of the target platform.
Having taken the time to learn Java and the various development environments from
Sun and Symantec over the last couple of years, I can unreservedly say that Rhapsody
rocks the house and Java has a lot to implement before it offers the power, elegance
and integration of Rhapsody. After this delightful porting experience, I believe that
Rhapsody is Write Once -- Runs Right Everywhere.
______________________________
Andrew Stone, an early HyperTalk developer and co-author of "Tricks of the
HyperTalk Masters" emigrated to the NeXT community in 1989, going on to write such
NeXT classics as TextArt, Create, DataPhile and 3Dreality.