Post on 22-Apr-2018
GNUSTEP
gnustep.org
GNUstep: What is it ?
• A powerful object-oriented development environment:
• A set of cross-platform libraries for developing applications (text, graphic, script, web, etc.)
• Development tools and applications
• A free implementation of the OpenStep specifications
• A community :-)
gnustep.org
Once upon a time...
• NeXT and SUN collaborated in 1994 to create an open API: OpenStep, extending on the famous NeXTSTEP environment and API
• Soon, SUN moved its focus on a new toy, and NeXT was brought by Apple in order to create MacOS X
• In the meantime, the Free Software Foundation started a free implementation of the OpenStep specification
gnustep.org
What’s interesting ?
• GNUstep is crossplatform (Linux, *BSDs, Windows, OSX...) and compatible with Cocoa (Apple)
• Objective-C is a really nice, simple yet powerful language, and you can transparently reuse C libraries (and soon with gcc 4, C++ libraries as well)
• You’ve got Distributed Objects for free !
• GNUstep provides really powerful development tools like GORM, that really speed-up the development
gnustep.org
Languages
• Objective-C is the main language
• but bindings exists for other languages:
• Java, Ruby, Scheme, Smalltalk
• with some work, existing Cocoa bindings for other languages like PyObjC (Python) and CocoaCamel (Perl) could be ported.. any volunteers ?
One-minute course on Objective-C
gnustep.org
Objective-C ??
• A strict superset of the ANSI C -- a dozen new keywords and only one syntactic addition
• Simply provides what’s needed to have real object-oriented features, not just class-oriented features: messages, late bindings, dynamic loading, introspection, categories, etc.
• Very inspired by Smalltalk !
• “When I invented the term Object-Oriented, I didn’t have C++ in mind” -- Alan Kay
gnustep.org
Interface
@interface MyObject : NSObject{ NSString* name;}- (NSString*) name;- (void) setName: (NSString*) str;+ (void) print: (id) anObject with: (NSString*) aMessage;@end
gnustep.org
Implementation
@implementation MyObject
- (NSString*) name { return name; }
- (void) setName: (NSString*) str { ASSIGN (name, str);}
+ (void) print: (id) anObject with: (NSString*) aMessage { NSLog (@”%@: %@”, aMessage, anObject);}
@end
gnustep.org
Usage
MyObject* anObject = [[MyObject alloc] init];
[anObject setName: @”Toto”];
[MyObject print: anObject withMessage: @”My object’s name is”];
My object’s name is: Toto
GNUstep components
gnustep.org
GNUstep’s Architecture
GNUstep – Overview, Stefan Urbanek, 2004
GNUstep Core
Hosting Operating System
(Linux, BSD, MS Windows, OS X, ...)
Foundation Kit
(Base)
GNUstep Architecture
Application Kit
(GUI)
GNUstep
Applications
Graphics
Backend
(Back)
Other Frameworks
Database Kit
StepTalk
Scripting
Web Deployment
...Native Graphics
System
Operating
System
Foreign
Legend
Bundle
Framework
Application
Slide level: Introduction
gnustep.org
GNUstep Frameworks
• Foundation
• AppKit
• GDL2: EOF 4.5 clone
• SQLClient
• GSWeb : WebObjects clone
• StepTalk : script engine
gnustep.org
Development process
GNUstep – Overview, Stefan Urbanek, 2004
Development Tools
Development Applications
Make Environment
(GNUstep-Make)
Gorm
Project Center
GNUstep Application Development Process
Application
Developer
User Interfaces
Source Code
Makefiles
Other Resources
(Images, Sounds,...)
GCC
Make
GNUstep
Foreign
Legend
Information
Slide level: Introduction
gnustep.org
ProjectCenter
• The GNUstep IDE
• Manage your project’s files (source code, images, etc.)
• Create the makefiles
• Give you a nice GUI to set up options..
gnustep.org
GORM
• At first glance, it’s just another GUI builder...
• ...with nice additions like guidelines, etc.
• But it’s much more than that : it’s really an object relation modeller
• a “gorm” file is the serialization of the object’s graph
• Check a video demo on http://www.gnustep.org/experience/DevelopmentDemonstration.html or come to the GNUstep booth/devroom for a demo
GNUstep Object Relationship Modeller
Related projects
gnustep.org
Frameworks
• Pantomime: mail management (pop3,imap,smtp..)
• NetClasses: asynchronous network library
• Addresses: address book management
• BookmarkKit: bookmark management
• Tryst: RendezVous implementation
• CameraKit: libgphoto wrapper
• SlideShowKit: includes slideshows in your application
• etc.
gnustep.org
Applications
• Not many apps for the moment (around sixty), but growing fast
• Even with so few applications, you can experience the interest of having applications really cooperating (check the live CD or go the booth for a demo)
• examples...
gnustep.org
Desktops !
• Different projects to create a desktop based on GNUstep libraries:
• Backbone : the goal is to implement a NeXTSTEP-like desktop
• Étoilé, Garma : wants to push the enveloppe :)
gnustep.org
LiveCD: GNUSTEP
• http://livecd.gnustep.org
GNU
S
T
E
P
a
f r
ee
i m
pl e
me
nt a
t i on
o f
t he
O
pe
nS
t ep
s p
ec
i fi
ca
t i on
Unbenannt-2.indd
28.05.2004, 16:33
1
Gallery
Future
gnustep.org
Future...
• Amelioration of the graphic backends (Cairo, OpenGL ...)
• A better Windows backend
• more GNUstep applications and desktop-related stuff
• Better integration with KDE/GNOME
gnustep.org