15 ms·
The legacy of NeXT lives on in OS X (2012)
- keyle 2y agoIt's amazing that still today, you find NSStrings and NS prefixed stuff all over working code. It's actually hard not to know anything about the old Appkit, as much as Apple would have you believe that it's all SwiftUI now.
- Longhanks 2y agoApple is pretty clear in it's intention of making SwiftUI the blessed UI toolkit, however, they haven't deprecated AppKit or UIKit in any way and keep updating it, as they demonstrate at every WWDC with "what's new in AppKit" (e. g. for 2024: https://youtube.com/watch?v=McKYDogUICg https://youtube.com/watch?v=McKYDogUICg). They also provide means to mix-and-match AppKit and SwiftUI in both ways. In no way are they trying to "have you believe it's all SwiftUI now". It is simply the next generation of UI frameworks.
- lallysingh 2y agoThat's how they treated Carbon, until they didn't.
- ChrisMarshallNY 2y agoI feel that SwiftUI still has a ways to go. I like the ideas and philosophy, but the execution is still a work in progress. First, they really need to beef up the docs. Next, they need to stop punishing people for "leaving the lane." Not everyone wants their app to look and behave like a bundled Apple app. I dislike Autolayout, and UIKit definitely has a lot of "old school" flavor, but with IB and UIKit, I can make an app that can do just about anything that I want.
- PittleyDunkin 2y agoI love autolayout. I've never felt it's been so easy to learn how to lay stuff out. InterfaceBuilder felt so confusing and arbitrary and like having to learn an entirely new language just to get basic behavior working correctly. Plus, it didn't compile to code but to a "nib" file you had to work with in abstruse and unintuitive ways. At least I can debug code; how the hell can i debug a nib? Most of the exposed functionality was difficult to google and assumed you knew what all the obscure icons (like springs and arrows and lines) meant. Very confusing and frustrating. Meanwhile autolayout was very intuitive. Define your variables, define your constraints, and it just magically works.
- ChrisMarshallNY 2y agoI generally use storyboards, but I do need to occasionally do programmatic stuff. That's a pain, but I can make it work.
- saagarjha 2y agoAre you still using them? It seems like Apple is basically killing them…?
- ChrisMarshallNY 2y agoYeah. The Interface Builder/Storyboard Editor is a slow-ass bug farm, but it works. They are still maintaining and improving it. Apple may be pushing SwiftUI, but they aren’t stupid enough to kill off UIKit/AppKit. I’ll lay odds that most AAA programs are still ObjC.
- Klonoar 2y agoI sound like a maniac whenever I express my desire for Autolayout over HTML/CSS. I will in no way deny the sheer power the latter/reach/etc has and I can see why people like it. Autolayout, while tricky to get at first, pretty much "just works" when I write it nowadays... and the older I get, the more annoying I find the cascade in CSS.
- joshstrange 2y ago> First, they really need to beef up the docs. This is a common refrain I hear w.r.t. Apple and while I write very little native mobile code I have to agree. It’s so sparse and rarely has more that I should be able to find out by hovering over a function/variable in my IDE. Would it kill them to add a paragraph explain why or how you use the thing? To add code samples? Must be too much for one of the most valuable companies in the world… What kills me is that this is actively hurting their own platforms. I can understand some of Apple’s moves but this one is so incredibly short-sighted.
- myko 2y ago> What kills me is that this is actively hurting their own platforms I don't think they care. Any useful application will be re-created by Apple and bundled with their OS eventually anyway. Outside devs aren't really necessary for anything but games.
- ChrisMarshallNY 2y agoThose of us "of a certain age," know that Apple used to have the best documentation in the industry. Many of the folks that wrote the docs, had more credentials than the ones writing the code.
- wpm 2y agoI love when I find some fantastic doc in the Apple Doc “Archive” with some huge banner at the top reminding me that there is newer documentation available that has, at best, 10% of the content.
- jen20 2y ago> Not everyone wants their app to look and behave like a bundled Apple app. As (now just) a user of macOS, that’s EXACTLY what I want - consistency, not the output of some branding or UX person trying to mark their territory.
- ChrisMarshallNY 2y agoAs with everything, "it depends." It's entirely possible to have unique branding, yet maintain consistency with standard Apple UX. Just takes flexibility and compromise. Many designers aren't so good at that. On a related note, did you ever try out Kai's Power Tools[0]? Now that was a nonstandard UX. Some folks really loved it, but it was an acquired taste. [0] https://mprove.de/script/99/kai/2Software.html https://mprove.de/script/99/kai/2Software.html
- jen20 2y agoActually yes! And Kai's Power Goo as well - both of those I hated. I really want apps to fit into the platform, and not try to be special snowflakes, regardless of what the platform is. Admittedly defining what a "Windows app" looks like has got harder over the years, and there were some dark years on the Mac where people tried to rationalize when to use brushed metal and so forth... The broader point is, I'm very glad Apple are making it harder for people to go off piste with regards to look and feel. Some people might be capable of doing a good job, but like with advertising, the well has been poisoned, and I assume that everyone doing it at all has poor intentions. Games get a pass (though I don't personally play any on desktop computers).
- wpm 2y agoYeah just like the Home app…or the calculator that can’t be resized…or System Settings (oooh which way is the text going to run in this text box? Nobody knows!)… or Game Center, or Apple Music, or any of the other half assed first party apps on the platform that all use different layouts and UI components and behaviors. The consistency you seek is gone, and has been for ages, if it ever even existed.
- 2y ago
- turnsout 2y agoI’m achieving very custom looks in SwiftUI. What exactly do you find punishing?
- ChrisMarshallNY 2y agoHere's an example from a couple of weeks ago: I wrote a small SwiftUI app, to display simple bar charts of data from our social app. Number of active users, vs. ones that haven't signed in, user acceptance/rejection rates, etc. The SwiftUI Charts library is pretty good for this. I consume a CSV file into a dataframe, and add some extra computed properties, etc. I wanted to add the ability to pinch to zoom, so users don't need to look at the entire dataset, and try to find individual days, etc. I banged my head for a couple of days, getting it working the way I needed (TL;DR, I did. Just took a while). I can add a magnification gesture adornment, but the docs for it suck, the docs for the charts suck, the docs for the viewbuilder suck, the docs for the view suck, and even the docs for the dataframe suck. I basically had to find out what I needed, by trial and error, and examining the exposed protocols. Some of the stuff is crazy easy, like translating the pinch to a usable number, but then, I wanted to add a bit of custom handling, for the edges, and allowing the user to pan the chart, while also being able to individually inspect bars (I ended up giving up on that, and have an ugly scrubber scrollbar under the chart). It also doesn't work on the Mac, which sucks, because I do a lot of admin stuff on the Mac. It's a long story, and I'm sure that you would find fault with my work (one of the things geeks love to do, is point out errors made by other geeks), but it shipped, it works, and we've been using it for days. And, in the end, even though it exhibits nonstandard behavior, it looks exactly like a Settings App panel. That's fine. It's a backend dashboard, but I'd be upset if it was something we needed to expose to end-users of the app.
- chrisbrandow 2y agoYou can actually find some NX stuff in active headers as well
- wpm 2y agoThe preference file for com.apple.applescript holds a bunch of <data> keys that are base64 encoded NeXT "NXStreamType" objects, or "typedstream", it would change based on the endianess of the system it was running on. The only docs I could find were in a header file from 1999 written by Bertrand Serlet.
- acka 2y ago> Along with analysis and debugging tools, Apple still gives away everything needed to build apps for the Mac, iPhone, or iPad. Very conveniently glossing over the fact that developers still have to pay an annual Apple Developer Program subscription fee in order to be able to distribute their apps. TANSTAAFL, as always.
- rcarmo 2y agoNot just distribute, even to run them locally on your own devices for longer than a few days.
- hyhconito 2y agoVery conveniently glossing over the fact that if are developing for the Mac, no you don't. You can distribute it outside the store without paying anything. iOS, yep you're right.
- mycall 2y agoiOS can sideload. Is that not allowed in the development license?
- Kwpolska 2y agoIf you choose not to pay Apple for the privilege of macOS development, you will need to teach users increasingly more arcane tricks to get the app running. As of the latest macOS release, the old trick of "right click -> open" stopped working, and the new trick is "open -> go to system settings and click on a magic button -> open again".
- bzzzt 2y agoYou don't pay Apple for the privilege of development, you pay them for the privilege of guaranteeing your users you are a legit developer who cares about their safety by registering and letting your app be reviewed. Considering it would take less than a day for Apple's registration scheme to be overrun with billions of fake app builders if they don't put in a small monetary roadblock I don't see how this situation could be improved.
- mark_round 2y agoA tangent I know, but looking at those old screenshots really made me miss that era of OS X. The first versions of Aqua with pinstripes were a bit busy for my liking, but by the Mountain Lion time frame it was just lovely. Actual buttons! Soft gradients! Icons that had colour!
- mycall 2y agoIf only there was theming available to recreate those old formatting and styles.
- threeseed 2y agoCopland the failed OS NeXT was acquired to replace had themes. https://lowendmac.com/2005/apples-copland-project https://lowendmac.com/2005/apples-copland-project
- ChrisMarshallNY 2y agoYou also had Kaleidoscope[0]. That had some crazy themes[1]. [0] https://www.macintoshrepository.org/1706-kaleidoscope https://www.macintoshrepository.org/1706-kaleidoscope [1] https://web.archive.org/web/20191021204432/https://twitter.com/kaleidoscopemac https://web.archive.org/web/20191021204432/https://twitter.c...
- fredoralive 2y agoMac OS 8.5 and above technically the theming support as well (presumably salvaged from Copland), but Apple removed the themes from the final version of 8.5, and never released any of them. I'm not sure if many 3rd party ones were made either, as another commentator notes Kaleidoscope was already fairly established as the theming tool for classic Mac OS, and worked with older stuff like System 7.
- vintagedave 2y agoI run an iMac G4 with 10.5 as a home music player. The strange thing is that it feels so easy to use. All the ingredients are the same in modern macOS but the feel is very different. It’s hard to say why. Clarity in the UI is a big one (placement and interaction, not the theme, ie what we’d call UX today). But the look of the UI (colour, depth) really adds something too. Seeing a blue gel button sparks a sense of joy.
- andrewstuart 2y agoIt surprised me that Steve Jobs would be so open to unix. I thought with his not invented here syndrome and desire to control everything and attraction to simplicity and graphical UI he would have hated unix. How did he come to love unix enough to build NextStep on it?
- mpweiher 2y agoSteve Jobs was very open about taking things from elsewhere and refining them for consumption. Lisa and Mac were products of his seeing the Smalltalk GUI at his visit to PARC. There was nothing off-the-shelf, so they had to be built from scratch. Of NeXT he said that he had been so bamboozled by the GUI at his PARC visit that he missed the other two, arguable more important concepts: OO and networking. NeXT used as much off-the-shelf components as possible: Ethernet + TCP/IP for the network, Unix for the OS, Adobe's Display Postscript for graphics, Stepstone's Objective-C for the OO parts (which in turn mashed together C and Smalltalk). It bundled TeX, Sybase SQL Server, a bunch of scripting languages, Webster's dictionary, etc. They only built themselves what they absolutely had to to get the machine and user experience they wanted.
- sho_hn 2y ago> Steve Jobs was very open about taking things from elsewhere and refining them for consumption. See also, forking KHTML into WebKit to build Safari when MS cancelled Internet Explorer for macOS and the platform was left without a robust browser choice. For two reasons: That they were somewhat comfortable letting MSIE reign for so long rather than making an inhouse option, and for not starting over when they did.
- threeseed 2y agoAlso the influence of WebObjects has been unappreciated. EOF was probably the first ORM and Direct To WS the first web-based no-code tool.
- hugi 2y agoAbsolutely. WO was a brilliantly designed framework (especially for the time) and being somewhat disillusioned with the state of web development in the last decade, I'm still using it as the UI layer for some of my own applications. It just can't be beat when it comes to throwing together a quick app, essentially being AppKit for the web. And as you say, it's influence was great, although I often wish it had a little more influence. EOF was a great ORM framework as well and I never really understood ORM hate - until I had to use ORM frameworks other than EOF which generally feel … not that great. I ditched EOF a decade back though, due to it being, well, dead, and replaced it with Cayenne which is an excellent, actively developed ORM that feels very much inspired by EOF's design principles. In the last few years, I've been working on a WO inspired framework (to the point of almost being a WO clone on the component/templating side) as a side project. It's still very raw when seen from the outside, no documentation and still operating under a bad codename - but hoping to make a release and port my remaining WO apps in the coming year. Hopefully it will add at least a bit to WO's influence on the web development world :). https://github.com/ngobjects/ng-objects https://github.com/ngobjects/ng-objects https://www.youtube.com/watch?v=-obvt93wSFc https://www.youtube.com/watch?v=-obvt93wSFc
- threeseed 2y agoEspecially hilarious when you think of the rising popularity of HTMX. WebObjects at the time revolutionary model of using the URL for state management would work really well with the new trend back towards server side rendered components.
- hugi 2y agoTotally. I've been very happy to see the world embrace htmx in the last year and it's given me confidence knowing I'm doing the right thing with ng-objects. The methodology htmx uses is in many ways identical to what we've been doing in the WO world for almost 20 years using Ajax.framework (which I don't know if you're familiar with), a WO plugin framework that most importantly adds "partial page updates". So you can wrap a part of a page/component in a container element, and target it so only that element gets rendered/replaced on the client side when an action is invoked (link clicked, form submitted etc.). And yes, combined with WO's stateful server side rendering and URLs, it's ridicilously powerful. I usually design my WO apps so users never actually see a stateful URL, they always land on "static URLs" while stateful intra-page work happens through page replacements. I love it.
- vintagedave 2y agoI remember the Unix-ness was a big part of OS X’s nerd popularity. People were talking about real Unix terminals, for example. Later Windows also aimed for the same thing with their new console app and Linux support. Yet macOS has remained the same. The Terminal app feels essentially unchanged and there’s no good app package service (eg brew etc - these are third party and can mess up your system.) Even Xcode is, well… look how extensions were restricted. Modern macOS feels boring, but also not aimed at developers.
- tomxor 2y agoBack in early 2000s it was a top choice if you wanted some kind of unixy box with a polished GUI desktop that "just worked", especially if you wanted a laptop. BSD and Linux were fine, but as a desktop OS they were a very different experience from today, took way more tinkering even on a desktop PC as anyone who had to write their own X11 config will tell you. Today installing a Linux desktop distro is so easy and hardware compatibility is so good that the tables have turned, also if you are the type of user that wants a big DE (no judgement) the Linux DEs today are far more polished, people still complain today but if you go back in time it was a mess. These days MacOS seems extremely restrictive and awkward by comparison, on the one hand a huge chunk of the userland got stuck in time, while Apple have become more and more hostile to any kind of changes and customisations to the more unixy side of the system.
- pjmlp 2y agoSun had an agreement with Toshiba for Solaris laptops, but they were rather pricey. UNIX is stuck in time, hardly anything improved beyond file systems, and small API improvements, and that is what macOS is measured against, POSIX certification. To note that the only standard UNIX UI is CDE, and anything 3D isn't part of POSIX.
- anthk 2y agoZFS, BcacheFS, HammerFS... I think OpenBSD will have a better FS soon. On modern FS', the plan9/9front ones are pretty much ahead of almost anything; but plan9 it's a Unix 2.0. It went further. On 3D, forget POSIX. GL was the de facto API and now Vulkan, and the most common middleware multimedia API it's SDL2.
- larusso 2y agoAround 2010, I started learning Objective-C to be part of the whole native mobile development movement. What I didn’t know when getting into this was how much of a history lesson I would have to participate in to understand the background behind so many aspects of the language and the core frameworks.
- myko 2y agoI miss that era!
- deleted 2y ago[deleted]
- wslh 2y agoYes, I had a similar experience with Objective-C. While I found it generally odd, it makes complete sense as a C/C++ alternative with reflection capabilities and a lean event loop. I disliked the memory management. The language hasn’t aged well but that doesn’t mean it lacked clever ideas for its time.
- spacedcowboy 2y agoI think it's aged wonderfully. Given its requirement to be a pure superset of C, it's a far better (IMHO) version of "C with objects" than C++ has ever managed. If you have a good understanding of C, ObjC is just: - ok, do all that stuff you did and pretty much forget about[*] memory management, we'll do that for you. This is utterly liberating. - you want dictionaries, arrays, sets etc ? Gotcha covered - you want real natively-built-in UTF support ? Yep, got that. - you can even dynamically create/inspect/alter classes at runtime, which makes things like plugins an absolute doddle. - on top of all that, if you really need something to be in C or C++, just add it. Pure superset, remember, so your other-language code (or 3rd party libraries) will link just fine. What I never understood was why people (and to be clear, I am not aiming this at the parent post) would take a look at the [...] syntax and immediately move on. It reminds me of people who board an aeroplane and get whizzed to another continent at enormous speeds, elevation and concomitant pressure-differences and then complain about the in-service drinks. The drinks! I'm an unabashed fan of ObjC - it pretty much hits the perfect sweet spot between the low-level access that C provides and the over-engineered bloat that C++ ended up as. There's a really minimal extra cognitive load (over C) in ObjC for all the extra facilities the language provides (and in some cases, like memory management, a lot less). It's a real shame that Apple were the only ones to get on board. [*] Two caveats. 1) You do need to still understand about strong vs weak references. Since ARC. is "Automatic Reference Counting", two objects that each hold a strong reference to each other won't ever be automatically released. 2) If you actually do explicitly call malloc() on something, it's on you to call free(). The reasons to call malloc() are far less than under C but the option is still there for you (being a superset of 'C') if you want to get your hands dirty.
- shae 2y agoI remember seeing finder running on NeXT at a Halloween party at he Omni group in 1999. That was a cool experience.
- jasoneckert 2y agoAs a longtime NeXTSTEP user, I still remember the first time I perused the filesystem of Mac OS X 10.0 (Cheetah) in 2001. And I distinctly remember thinking to myself that Apple basically took NeXTSTEP and slapped their own window manager and app framework on it only. The filesystem and toolset was nearly identical, and I even found several config files (I don't remember which ones) that still had NeXTSTEP listed in the comments. As I evolved to develop iOS apps in the 2010s, NSObject (NS=NeXTSTEP) continued to be a reminder of this same lineage.
- mepian 2y agoNS stood for NeXT and Sun. NX was the original prefix before OpenSTEP. EDIT: I might be wrong about the first part, see my comment below.
- ManuelKiessling 2y agoUh, that‘s interesting! Do you have a source for this (or is it firsthand knowledge?)
- mepian 2y agoI have an original "NeXTstep Concepts" manual with the NX prefix. I can't remember where I heard the "NeXT and Sun" explanation for the first time, but a Google search shows that the prefix change could've actually occurred before the collaboration with Sun. It could stand for NeXT Software, as it's closer to the transition to a software company.
- Reason077 2y agoThe "NS" prefix was introduced with OpenStep in 1994[1]. OpenStep was a collaboration between NeXT and Sun[2]. So the S in "NS" referring to Sun is certainly plausible! [1] https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html#//apple_ref/doc/uid/TP40002974-CH3-SW12 https://developer.apple.com/library/archive/documentation/Co... [2] https://en.wikipedia.org/wiki/OpenStep https://en.wikipedia.org/wiki/OpenStep
- WillAdams 2y agoI just wish it would be more widely available. Anyone using GNUstep successfully?
- vrodic 2y agoi kind of hate that OjectiveC killed ObjectPascal and that we don't have a mainstream modern kernel written in Pascal.
- pjmlp 2y agoObject Pascal was sadly mostly gone by the time NeXT was acquired, C++ was the main Apple language already. Object Pascal got replaced with MPW environment, and a C++ version of Toolbox got introduced. Additionally Metrowerks with the PowerPlant C++ framework, was eventually the main Apple partner for Mac OS development.
- helf 2y ago[dead]
- pipeline_peak 2y ago“ We saw the invention of the fricking World Wide Web on NeXTSTEP” I can’t stand when people bring this up with such pride. Like the web couldn’t have came on SPARC or anything other than the glorious Steve Jobs cube.
- pjmlp 2y agoProbably not, as it was also a matter of available tooling. Rails, as concept, existed in Tcl and Python, AOLServer, Vignette, our Safelayer, Zope,... Yet it took Ruby, and a cool demo, to put that idea into world scale motion.