1. 12
    1. 16

      In 1994, Sun and NeXT released the OpenStep specification. It contained NSColor, which represented a colour in an arbitrary colour space and carried a pointer to that space around with it. Each component in the colour was represented as a float. It had everything that is necessary for defining colours in modern HDR colour spaces.

      objcX was originally trying to clone the pre-OpenStep and, in 1994, became GNUstep, which tracked the OpenStep specification (and, later, Cocoa). GNUstep’s NSColor followed the spec and could be used to pass these things through to arbitrary back ends.

      In 1998, GTK was released, as a replacement for Motif in GIMP. It hard coded sRGB and provided no clean abstraction over colours.

      For some reason, GTK was the thing that people building *NIX desktop environments got excited by.

      1. 4

        Now you’ve got me curious about why GTK was the one that took off. I don’t even recall hearing about GNUstep until the late 2000s. Having just done a paid project for the GNOME Foundation (a prototype of a new accessibility architecture), I do wish we’d had the timeline where GNUstep had taken off instead of GLib, GObject, and GTK.

        1. 5

          I didn’t hear about GNUstep until 2003, when I started my PhD alongside one of the active developers on the project. It was starting to see interest because of OS X. A big part of the problem was that NeXT sold around 50,000 computers and most didn’t go to developers. On other platforms, the OpenStep SDKs cost tens of thousands of dollars. Everyone who used OpenStep loved it, but that was hardly any people in total. Of those, only a small fraction wanted to contribute to an open reimplementation. With OS X, a lot of people were trying Cocoa and discovering that it was really nice to develop for, but by then the non-Apple *NIX environments had settled on the GTK / Qt duopoly and there wasn’t really a place for a third one.

          The surprising thing to me is that the FSF actually did quite a bit to push GNUstep in the early days. For example, they paid the company behind GhostScript to implement an X DisplayPostScript extension (xdgs). Unfortunately, the performance was pretty bad and so GNUstep ended up having pluggable back ends (libart was used a lot early, gradually replaced with Cairo).

          A little bit more (and better focused) investment early on could have led to a really nice foundation for Free Software desktops.

          That’s not to say that GNUstep was without faults. As a FSF project, it clung to GCC, which was a disaster. GCC shipped a major release with Objective-C completely broken and was either late getting modern Objective-C features or never got them. It still lacks ARC and GNUstep still has a requirement for the core frameworks to be able to compile with GCC (which means distros like Debian insist on compiling them with GCC and lose a load of features). There were also a load of developers who were allergic to external dependencies and so spent a lot of time poorly reimplementing subsets of ICU and HarfBuzz rather than just wrapping them (but also wrapping them, because the internal implementations were poor). The switch to [L]GPLv3 also put off a load of interested corporate users who were interested in contributing.

          1. 1

            GTK was written in C, and used by one of the major Linux applications, Gimp. Motif wasn’t open source.

            All those things might look a bit silly right now. Everyone seems to be doing their own compiled systems languages, and getting to tinker one might be seen as a job-switching factor. Linux has applications a-plenty (mostly because it has a browser and everything is web now). Motif was open sourced quite a while ago.

            Not doing C++ was a big thing. It compiled slowly on machines of the day, everyone was using a different subset, but a lot of people felt that it still didn’t improve that much on C. Where you could also then continue in the OOP bikeshedding that was happening a lot back then – not as much as OO vs functional, but whether it should be Smalltalk or Self or Eiffel. I mean, GTK could’ve used the other X11 C OO basic library instead of inventing gobject.

            That repeated itself a few years later when Mono was introduced into GNOME, by the way.

            GNUStep simply wasn’t a big topic back then. No Cocoa, not much progress, it was basically the Hurd of desktop toolkits. Never mind that it wasn’t pure C, either.

          2. 3

            Because Worse is Better.

            At least Cocoa survived.

            1. 3

              The moral of the story is that square brackets are scary; we have Objective-C at home (GObject).

              1. 1

                Also angle brackets and colons.

          🇬🇧 The UK geoblock is lifted, hopefully permanently.