GNUstep compatibility with macOS Catalina almost complete
heronsperch.blogspot.com
heronsperch.blogspot.com
There was a weird bug that took me forever to debug… and in the end, it was caused by some horrible bug in some map structure (NSDictionary? I think?) where a NSString unicode key did not map to the same value every time. Quite basic stuff. (It worked fine on Mac.)
As a student I didn’t really know how to report bugs, so I didn’t; I just wondered how did nobody catch it until now; but I just thought that probably nobody really uses GNUStep so that’s why.
It’s just anecdotal and I don’t really have access to the code anymore so I cannot tell you the details. (the original code was far from perfect too, maybe it was some unicode weirdness.)
The point isn't whether it is good or bad. The point is nobody use it like that thus nobody knows it would break.
The good thing about open source software in general is: if you complain and give a detailed procedure of how it happens, there is much higher chance somebody might looks into it (or yourself if you will). Closed source software in the other end: good luck, find a workaround if you hope or just stuck with it.
But I don‘t want to downplay the work and time put into this project. I would simply not use it in any project because of the number of compatibility bugs that haunts the project.
I used the project in production via Apportable’s crosscompile solution to port iOS native apps to android.
Basically, that’s how.
But, is it really worth the time?
Free Pascal and Lazarus devs also implement a language and API originally defined by some big company in the past and in general try to implement the new stuff Delphi adds, but they also try to avoid breaking existing code. In Free Pascal this is done by using compiler directives in the source code to opt-in for the Delphi stuff whereas in Lazarus they only implement things that do not break existing code - either way you can have code that works with both Delphi and FPC since they're 90% compatible but you need to use IFDEFs for that that last 10%.
Even though i'm using Window Maker and thus GNUstep apps would feel right at home (for the most part), i haven't actually bothered to look into it because Apple has a bad history with breaking existing applications (i got an iMac in 2009 and pretty much every single Mac OS X / macOS update broke some application that previously worked fine - until macOS itself stopped supporting my iMac) and GNUstep's "we're not implementing NextStep anymore, now we're doing Cocoa" stance gives me an impression of "we're going to break your apps just like Apple does".
(of course that is one reason, another is that when i tried some programs made with it years ago there were major glitches and bugs like the text editor widget locking up the entire program - admittedly that was years ago and it probably has been fixed but it did give me a bad impression since the project was already more than a decade old by then and already in a state where barely any developers worked with/on it)
Basically, what i wonder is, if i make a Linux binary today that links only against glibc and the GNUstep libraries (including the ObjC runtime), will it work in 10 years[0] even if it uses some API that in the meanwhile Apple decided to change or it'll break? Ignoring of course breakage forced on the project from outside forces they could do nothing about (e.g. for some unfathomable reason the C ABI itself changing or everyone switching to RISC-V with all x86 CPUs blowing up at the same time and every x86 emulator out there suddenly losing both its source code and any existing binaries).
I get the impression with ObjC having a very "dynamic" nature it should be possible to do that.
[0] obviously if it works in 10 years it'll also work in 20 years since in 20 years a binary made 10 years from now will still rely on the libraries being backwards compatible - the 10 years was an example to give a sense of scale
My guess would be that your hope is doomed by the platform whatever GNUstep does.
It really depends. I managed to get a universal intel 32/64-bit app compiled on OS X 10.5 run on Catalina, which is 10.15. But it was a very unremarkable app. Just a simple NSWindow and label. Nonetheless demonstrates you can technically have some backwards compatibility.
At one point in time (say 2004), you would've been able to launch Classic environment on a PowerMac G5 and emulate 68k software in Classic, all the while enjoying OS X software natively. That should span some decades worth of Macintosh software, but of course this era is simply gone now.
That was a few years ago though so I wouldn't be surprised if some of those deprecations have turned to errors in the meantime.
See .NET Core migration, Windows Runtime tooling, Xamarin/MAUI, UWP/WinUI 3.0,...
The folks that were responsible for that kind of backwards compatibility apparently are no longer there, replaced by younger blood without any knowledge of Windows development history.
Nowadays we even get CLI stuff instead of nice VS wizards.
The first version used COM, while the second uses plain C API.
I doubt this will be something still going forward, now that Azure OS is what mostly matters, as proven by anything post Windows 8.
Try to run anything from Windows Runtime tooling introduced alongside Windows 8 on latest Windows 11. Or better yet, Windows Phone 7.
OSS Audio? OSSPD, AOSS>
Linux is backwards compatible going back decades and glibc also largely maintains backwards compatibility as long as you are not using hidden APIs - and realistically if you stick with the common C stuff you should be fine in most systems (AFAIK outside of Linux, most Unix systems treat the C library as their "stable" API).
There was a time when it was --- there was a "Missile Command" game written for the 128K Mac which still ran fine in the Mac OS environment running the last version of MacOS on PowerPC machines:
http://www.mrob.com/pub/comp/missile20.html
and the previous version of Rosetta was for running PowerPC apps on Intel machines (and before that it was for handwriting recognition).
and I've always regretted that Macromedia Freehand didn't get re-written so as to run for longer --- that's one of the reasons I've pretty much switched to a Windows machine (using a Samsung Galaxy Book 3 Pro 360, which replaced a Book 12, which replaced a Toshiba Encore 2 Write 10, which replaced an Asus Vivotab Note 8, which replaced a Fujitsu Stylistic ST-4110, which replaced an ST-2300, &c.) I use a Wacom One w/ my MacBook, but it's just not the same.
Is 10 binary or decimal? Do you mean 2 years, or actually 10 years in base-10?
Now the keybinding tangent: If you're not rolling VIM keybindings in the whole desktop (which is tricky for non-modal interfaces and alienating a large amount of users), the next best ergonomic keybinding scheme is the Emacs / Gnu Readline system [2]. It allows moving the cursor without having to move hands around (e.g. going to the arrow keys, coming back to the alphabetical keys). It is one of the base tenets of unix systems. Every terminal supports it. Yet, the whole bunch of Linux Desktop systems completely ignored these keybindings and copypastaed the Windows concept instead, coming up with a weird chimera of readline in some places, and half-windows, half-self-invented in others.
Gnome used to have an Emacs compatibility mode that was somehow off by default and had to be enabled in a tweak. It was removed with GTK 4 however. If you want to do that in KDE, you have to run a weird python daemon, and half the apps constantly stop working because they key codes are being messed with.
MacOS on the other hand, supports these keybindings in every input dialog, it is a pleasure to use. Even more so, to have the same keybindings in every app and not having to learn new ones on a per-app basis.
Of course, running weird python key code daemons runs into the other problem that macOS & Gnustep solved in a much nicer way: By copying the shortcut system from Windows and patching it on top of Readline, many shortcuts have double entries. Printing is CTRL-P, but so is readline "Previous Line". macOS and Gnustep solve this by having a separate key for app actions: Command (or Hyper or Alt). So print is Command+P. Everywhere. Previous line is CTRL-P. This is always my go-to Linux joke where "Copy" is "CTRl-C" everywhere, except in the Terminal, where it's CTRL-SHIFT-C because yeah, CTRL-C has another meaning. Talk about a sane shortcut system if apps have to use different ones per shortcut because the amalgamation of Windows Shortcuts + Readline is a match made in hell.
[1]: https://github.com/trunkmaster/nextspace [2]: https://en.wikipedia.org/wiki/GNU_Readline
sane people will just use hjkl even on readline with ~/.inputrc and 'set -o vi' in ksh.
Off topic, but I actually really like Russell Watson's 'Faith of the Heart'. I mean, how can you not?! https://www.youtube.com/watch?v=M6bumUQwQIU
As is known, Jobs was inspired by the Smalltalk GUI.
WindowMaker is its own thing that just so happens to be trying to recreate software from the same ecosystem as GNUstep, but they don’t depend on each other.
Combining them tho does give you that genuine experience
http://toastytech.com/guis/ns332.html
And it's actually a pretty good place. Just like the whole "a menu is just a window with a list of buttons" idea was great.
Thanks for that rabbit hole of nostalgia, just remembered how wild Mac OSX 10.1 in its first release was. It was a real game changer, and looked great (albeit a bit slow on my poor G4 Cube).
And to be honest, I expected GNUstep to chase Lion or something, I had no idea there has been so much progress lately. Did anyone here use it?
Wait till you learn Clozure Common Lisp has an Objective-C bridge and features a Mac IDE written with it. Unfortunately it has bitrotted over time as Apple constantly changes AppKit and some Objective-C internals, but it's able to run on Catalina just fine, and it works even better on older versions of OS X.
LispWorks has that, too. Without the bitrot. It's running natively on current Apple Silicon Macs.
See the manual: LispWorks Objective-C and Cocoa Interface User Guide and Reference Manual
https://www.joelonsoftware.com/2000/04/06/things-you-should-...
https://eclecticlight.co/2022/11/01/everything-you-need-to-k...