gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNUstep on OSX


From: Ibadinov Marat
Subject: GNUstep on OSX
Date: Thu, 11 Apr 2013 01:28:01 +0300

Hello, fellow GNUstepers.

For a quite some time i've been maintaining fork of GNUstep primarily focused on OSX support and reliability.
The first objective is motivated by prevalence of OSX users in Objective-C user base (the only group people who could help with GNUstep development).
Second one is simply an obligation to my employer (this forks are used in production environment right now).

I seem to be a little bit tired to be alone on these journey, and am willing to be a part of a team. So i would like to offer this code base for you consideration.
Lets try to make you interested, here goes a list of features that i could remember:

FoundationKit:
* runs on OSX with apple-gnu-gnu combo
* type encoding support written from scratch (Apple's runtime does not offer it in the public API), and surprisingly it is faster and more robust than implementations in both GNU and GNUstep runtimes.
* invocations are implemented using assembly and have no external dependencies (if you are already parsing platform-specific marg_lists, FFI does seem like an overkill)
* reimplemented SOCKS proxy support, now both NSFileHandle and NSSocketStream do support SOCKS4a and SOCKS5 simultaneously
* eliminated causes of many crashes (noteworthy changes are in NSHTTPURLProtocol and NSStream) and memory leaks (found by Clang's static analyzer, Leaks and Allocations tools in Instruments.app)
* eliminated loads of buffer overruns (spotted by clang's address-sanitizer)
* slightly redesigned constant string implementation to be ABI independent (NSConstantString, NXConstantString and CFString are supported simultaneously by the same gnustep-base build) and 
implemented constant CFString support inside the Foundation. This implementation had proven to be reliable (CFString ABI is default on OSX and this gnustep-base plays nice with it)
* “NSInteger crusade” is finished, all methods/functions have reference-compatible signature, implementations are changed accordingly (no single warning is emitted by clang with -Wshorten-64-to-32 and -Wformat
* heed was given to all warnings emitted by clang
* introduced NS_FORMAT_FUNCTION, corrected all misuses of NSLog, [NString stringWithFormat:] etc.
* some improvements were made in compatibility with Apple's Foundation, also some missing methods were implemented

ApplicationKit:
* works on OSX with apple-gnu-gnu combo
* migration to NSInteger is completed (merged with Fred's changes, works fine)

Finally, some precautions.
AppKit: NSInteger changes are only tested with xlib backend, CUPS support is disabled by ./configure on OSX (it is linked against Apple's CoreFoundation
where all toll-free bridged classes are implemented, and causes runtime clashes), Cairo backend is disabled by ./configure on OSX (same reason as CUPS).
Foundation: GNUTLS support is disabled (it's also liked to Apple's CoreFoundation), as for now assembly code is only present for x86_64 architecture,
Mountain Lion support is underway (they have moved NSObject into runtime, what causes a lot of troubles).

Links to repos:
https://github.com/Ibadinov/gnustep-make (necessary configure.ac changes)
https://github.com/Ibadinov/gnustep-libobjc2 (added missing and now required objc_layout_finish_sructure())
https://github.com/Ibadinov/gnustep-base
https://github.com/Ibadinov/gnustep-gui
https://github.com/Ibadinov/gnustep-back
https://github.com/Ibadinov/gnustep-corebase (minor bugfixes)
https://github.com/Ibadinov/gnustep-projectcenter (makefile changes for OSX etc.)
https://github.com/Ibadinov/gnustep-gorm (makefile changes for OSX etc.)
https://github.com/Ibadinov/gnustep-sqlclient (bugfixes)

Not everything is currently merged into “master” branches, so it's better to use “dev” (where it exists) to play with.

P.S. I know about copyright assignment requirement and, if you are willing to merge this into upstream, i won't hesitate.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]