<story><title>GNUstep compatibility with macOS Catalina almost complete</title><url>https://heronsperch.blogspot.com/2023/03/compatibility-project-almost-complete.html</url></story><parent_chain></parent_chain><comment><author>shp0ngle</author><text>My only experience with GNUStep is that 10 years ago, as a student, I needed to port a random CLI Cocoa app (that a different student wrote to learn Cocoa) to GNUStep.&lt;p&gt;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.)&lt;p&gt;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.&lt;p&gt;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.)</text></comment>
<story><title>GNUstep compatibility with macOS Catalina almost complete</title><url>https://heronsperch.blogspot.com/2023/03/compatibility-project-almost-complete.html</url></story><parent_chain></parent_chain><comment><author>badsectoracula</author><text>I wonder if GNUstep is going to follow in Apple&amp;#x27;s backwards compatibility breakage or they&amp;#x27;ll try and keep existing programs working.&lt;p&gt;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&amp;#x27;re 90% compatible but you need to use IFDEFs for that that last 10%.&lt;p&gt;Even though i&amp;#x27;m using Window Maker and thus GNUstep apps would feel right at home (for the most part), i haven&amp;#x27;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 &amp;#x2F; macOS update broke some application that previously worked fine - until macOS itself stopped supporting my iMac) and GNUstep&amp;#x27;s &amp;quot;we&amp;#x27;re not implementing NextStep anymore, now we&amp;#x27;re doing Cocoa&amp;quot; stance gives me an impression of &amp;quot;we&amp;#x27;re going to break your apps just like Apple does&amp;quot;.&lt;p&gt;(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&amp;#x2F;on it)&lt;p&gt;Basically, what i wonder is, if i make a Linux binary today that links &lt;i&gt;only&lt;/i&gt; 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&amp;#x27;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).&lt;p&gt;I get the impression with ObjC having a very &amp;quot;dynamic&amp;quot; nature it should be possible to do that.&lt;p&gt;[0] obviously if it works in 10 years it&amp;#x27;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</text></comment>