GNUStep now has badges
multixden.blogspot.com
multixden.blogspot.com
> video streaming
NeXTStep had NeXTtime, which IIRC was also important in sealing the Apple deal, as Be's big claim to fame was (multi-media) performance, with the for-the-time impressive demo of 4 videos playing simultaneously. Nobody had really thought of it before, but playing 4 videos was also not an issue in NT, so Be-blocked.
https://www.paullynch.org/NeXTSTEP/AppleNeXT.htmld/present.h...
I recently (3 years ago) started developing on iOS and MacOS.
I learnt programming on Mac Plus in the late 1980s early 1990s
Wow, what a change. In the 1988-92 Macs were the bees knees for development. Really good.
Now, definitely not. I regularly switch between Mac, Linux, and Windows for development.
Development on iOS and MacOS is deeply painful. The tools are flash, lots of features, and they mostly work, that is they do not really work.
Apple took US$99 from me for a license to write software for their machines, and now I cannot run my software on iOS unless I am connected to the Internet, so they can "verify" my license. (I never got the license - another sad story)
Many times, regularly, the "verification" process goes awry and I spend time trying to work out which particular string of gobeldy gook I need to enter n which obscure part of Xcode to get the equipment I (my boss) paid for to do anything other than be dead weight.
The flagship language (Swift) is half arsed. Some bits are OK, but the threading model is from the 1990s dressed in drag. Memory management by reference counting? Golly, how 1990s. Passing class parameters by reference as default, but not struct parameters - say what?
Distributing the software we write to the users that need to use it is immensely painful, not my immediate problem, but I watch people in my firm tear their hair out trying to make it work.
How the mighty have fallen.
Classes are passed by reference.
I still have trauma
I remember NeXTtime - it was essentially a prototype tech demo that could play some -- only some -- QuickTime movies in a very small window. I find it unlikely that it was significant in the deal. IIRC the Apple tech team wasn't that impressed with the interrupt latency of Mach, which later had to be fixed at Apple out of necessity.
End users don’t use operating systems, they’re a burden of security vulnerabilities and compatibility issues.
If I had to round it out, the tech industry as a whole would prefer we all do everything in browsers over the cloud.
Disregarding freedom and privacy, I would prefer things to be that way.
Reliability too. The cloud is 99.9999 reliable until your power, therefore your internet cuts off.
Your local office, or emacs, or whatever, will gladly chug along until the M1's battery drains
Not that Im in a bad neighborhood: I just realized I might be the only one in my block that doesn't have a luxury vehicle. 8 year old Hyundai and 10 year old Golf for me in a sea of Mercs, BMW, Lariats and Lexuses.
Of course, I must be poor. I have a portable, Chinese clone 7000 kW gen that only feeds 6 circuits and sounds like a pneumatic gun. Half my neighbors have full-house automatic, natural gas fed GENERACs.
The OS(or more specifically the desktop environment) intended for a general audience will be more bland, uniform and legacy than the one made for a smaller more specific audience, perhaps it was made for the sole use of the author and they decided to share..
The general audience will have a preconceived expectation, you might say an intuition, about how the environment works, this mean, that an environment intended for such an audience cannot really have too much advancement or it will drift too far from expectation.
Support modern networking?
Support Unicode in all applications?
NeXT had full ipv4 support from the start.
Unicode wasn't a thing until after Apple bought them.
One experiment I've done on my own NeXTStation turbo was run equivalent applications on both a NeXT and a modern Intel mac pro. Mathematica, email, Framemaker/affinity publisher all take roughly the same time to load and execute similar tasks.
Yes you can't do 3d, video, or AI on a 33 year old NeXT, and the image files would be smaller, but beyond that you could easily do your day to day work on such a system. It doesn't feel old at all.
I’m not negating your experience and share the same sentiments, but there is also a bit of undeniable progress modern OSes made.
One such bit is high DPI and mixed DPI support (theoretically should be easy peasy with Display PostScript, but somehow I don’t think it would pan out well in practice).
I don’t remember what other multihead graphics cards existed at that time. For multiple video cards, you again had to reach for Matrox, since they were produced in both PCI and AGP variants and I’m unsure about other brands.
Considering that some M1 laptops didn't support multiple monitors because of the internal USB allocations, it's not like modern Macs don't have such caveats
Now Windows NT, on the other hand...
After win 7 the only innovation in windows has been incremental features mostly to upsell Microsoft services.
In practice, even if you managed, say, to port a modern Firefox and all its baggage down to OpenSSL and even GCC to compile it in a mighty for of herculean effort, it would still likely die of a thousand paper cuts anyway because quite a lot of syscalls would be expected to have evolved since.
But other modern codebases will want more modern syscalls without fallbacks and compromises (see those atomic file operations which solve some nasty vulnerabilities for an example).
PikoPixel was initially written for Mac, and GNUstep saved me a huge amount of work from having to completely rewrite it for Linux/BSD.
However, it was still a significant effort:
* GNUstep's an implementation of the Cocoa framework only, it doesn't include any other macOS frameworks.
* The same source-code & UI resources can produce different behaviors & visuals between the different platforms. This is due to different Cocoa implementations, some missing functionality on GNUstep, different system fonts, different window managers & desktop environments (Linux/BSD have many of them, each with their own quirks), etc.
A cross-platform Mac/GNUstep app is definitely doable - PikoPixel is now available in many Linux distro repositories (Ubuntu Studio even preinstalls it as a default graphics app) - but expect to spend significant effort correcting platform differences (depending on the app).
I'd suggest getting started by spinning up a VM, installing a GNUstep dev environment on it, then downloading some GNUstep app sources & building them.
PikoPixel's homepage links some build scripts for Debian & Fedora that will install both a GNUstep dev environment and PikoPixel: https://twilightedge.com/mac/pikopixel/
You can also browse PikoPixel's sources online at the Debian GNUstep team's mirror repository: https://salsa.debian.org/gnustep-team/pikopixel.app
(Note: PikoPixel's fixes & workarounds for the platform differences on GNUstep are found in the various source files that begin with PPGNUstepGlue*).
This alone would be a nice standalone open source project that one could extend to offer more coverage.
Back when I wrote some small apps, it was very easy to target Mac with the GNUstep makefile package. That could build on Mac without any extra work on the build side. I would sprinkle a lot with #ifdef __APPLE__ when the APIs differ, on a case by case basis. A lot of things (most?) work on both without modification, it just depends how new the API is.
Building for both GNUstep and macOS is difficult. The problem is, macOS wants you to use Xcode and GNUstep wants you to use their weird build system. In order to build software that is compatible with both GNUstep and macOS you will either need need to have two parallel build systems (one GNUmakefile and one Xcode project) or use a custom build system.
Personally I think GNUstep's build system is stupid, and I don't like using Xcode, so I lean more towards a custom build system. Sounds insane I know but it really isn't that bad. Compiling and running a Cocoa application on macOS pretty much boils down to this:
clang main.m -framework Cocoa
./a.out
I don't remember how to do it for GNUstep. It's been a few years. Their GNUmakefile thing is REALLY weird, they have all these Makefile macros you need to import and they try to abstract all of this stuff away. Using Makefile macros. It's horrible. I asked ChatGPT and it generated this: include $(GNUSTEP_MAKEFILES)/common.make
APP_NAME = YourAppName
YourAppName_OBJC_FILES = main.m YourAppClass.m
YourAppName_RESOURCE_FILES = Info-gnustep.plist
include $(GNUSTEP_MAKEFILES)/application.make
I would make a basic GNUmakefile, then run it with `V=1` (or `VERBOSE=1`? i forgot the name of the environment variable) to get the actual terminal commands its running, extract those, put those in your one-liner custom build script and be done with ithttps://github.com/gnustep/libs-xcode
MPWFoundation, Objective-S and related all build on both macOS and GNUstep without buildtool. Once you have the GNUmakefiles they are not that hard to keep in sync.
https://gitlab.com/mpwmo/ObjectiveSmalltalk/-/blob/master/GN...
https://gitlab.com/mpwmo/MPWFoundation/-/blob/master/GNUmake...
https://gitlab.com/mpwmo/MPWFoundation/-/tree/master/GNUstep...
But I was looking for both things. Is there a tool to warn against partial or not implemented functionality that needs to be avoided?
Works perfectly fine, and I don't see how some external tool attempting to give a guess at this would be easier, never mind as accurate.
I didn't even know GNUStep was being actively developed or maintained. I'd love to be able to use GNUStep as my primary workstation environment. Does anybody have any recent experience with attempting such a thing?
The bane of old X11 environments and UI toolkits is the DPI/resolution of modern screens. Usually the sweet spot for them is around 1600x1200, usable on Full HD, unusable on 2K. Windowmaker and GNUstep included.
I used Windowmaker with GNOME session running in background for years as a main driver, and went KDE Plasma due to the reasons above.
Windowmaker icons are 64x64 and while there might be a way to increase them, dockapps are rendered in 64x64 max. Devs used the display limit to achieve a certain style, such as LCD dockapps. Useful and charming but it's small and unusable at 2K or above.
So the first thing you're going to get yourself wrapped into are the fonts and font sizes in Windowmaker and GNUstep, and you'll never achieve the same look and feel as default on appropriate resolution.
I'm not sure what you find unusable but i'm using Window Maker at 2560x1440 (i assume that is what you mean with 2K) perfectly fine[0].
Though note that the overwhelming majority of monitors out there isn't 2K or greater but 1080p and 768p[1] :-P.
[0] https://i.imgur.com/yaU5OLn.png (my WM setup with a few utilities i made in a custom toolkit that has a WM/NS-like style)
[1] https://data.firefox.com/dashboard/hardware (scroll down to Display Resolution)
Big part of it was GTK2-GNUstep theme which made GTK apps feel "native" and there was something for QT too.
Can you put up some screenshots with GTK/QT "modern" apps floating around too?
Also I can't believe you are not finding that text size too small. I have 27" screen, great vision, sitting at a normal distance, everything is just too small. It's not unusable in strict sense but if you have problems with tiny text on big screen it would be.
P.S. for firefox stats I think we're mixing apples and oranges, OP asked about "workstation", and those are are worldwide client stats, so you have a lot of laptops and a lot of legacy computers in it
You need to configure the size of icon windows in windowmaker WPrefs, the app then needs then to query the [[[NSApp iconWindow] contentView] bounds] that it was created with. There are almost certainly still some dockapps in existence that don't do that and just use hard coded sizes though. I know that the clock app AClock, implements it correctly.
I'll try messing around Windowmaker in the next few days, this discussion fueled some old interest.
https://github.com/gnustep/libs-back/blob/master/Source/x11/... (-iconSize)
People use it with WindowMaker but people can also use it with whatever other desktop environment they're using.
Can I use the new features that Apple added in cross platform projects or open source environment like this?
I loved Objective-C very much (yes, really) and I'd like to continue using it after Apple phases it out
The problem is the frameworks (Foundation, UIKit, AppKit, etc) are closed source. So you either need to create your own frameworks or use something like GNUstep.
It’s going to take them a long time to covert it. So I don’t see them dropping it anytime soon.
It’s not recommend for new code (in Apple land) and they’re already starting to make features Swift-only.
But they won’t stop shipping it any time soon.
That's a real shame because FFI language bindings to Objective-C frameworks are amazingly simple to do with Objective-C. You basically create low-level C ABI bindings to objc_msgSend and about 40 other routines (e.g. class_getName). The latter bindings are principally for introspecting the class hierarchy and acquiring references to opaque class and method implementation pointers. method_getTypeEncoding returns a text-encoded type signature for a method. And objc_msgSend itself is a magical variable argument function for invoking arbitrary methods on arbitrary objects (including classes, which are objects themselves).
With that small set of C ABI bindings you can generate strongly typed bindings to all the many thousands of Objective-C framework and library interfaces, system and third-party. I did this for Lua and it works beautifully. And you can just as easily define new classes and methods and wire them up to the host language (Lua, Python, Java, Rust, etc), though I haven't needed to do that just yet. In my case this is all done dynamically at runtime, except for the ~40 required static C function bindings.
The only difficult part was binding objc_msgSend. You could use libffi, but in my case I wrote a script to statically generate a permutation of Lua/C binding functions with up to 6 arguments, any 2 of which could be doubles instead of scalars, and either a scalar or double return value. Atop those bindings sits a small Lua library which, using the other ~40 Lua/C function bindings, implements a type-safe bridge for the entire macOS Objective-C platform, GUI frameworks and all, modulo a small number of niche edge cases (e.g. IIRC there's a special Objective-C ABI for directly returning small structures which my objc_msgSend bindings don't implement, but I haven't run into those cases and my Lua bridge code would throw an error if I tried).
Because Objective-C itself uses reference counting, it plays well with any GC environment or lack thereof.
I'm sure Swift is a nice language, but there are many nice languages, and Objective-C makes language interoperability downright dreamy.
I originally had no inkling that Objective-C was so easy to write bindings for. I was vaguely familiar with its message passing architecture, but didn't appreciate the low-level implications--the potential ABI power (not just API) that came from foregoing static linking. I started my app hoping to not have to write many bindings to macOS interfaces, partly because I wanted to port it to Windows and Linux. I'm using the Yue GUI toolkit, which made it easy to bring up a simple Lua app without having to understand anything about platform GUI frameworks.[1] I wrote a whole slew of Core Foundation (plain C) Lua bindings for little things like property file integration, hoping to avoid dealing with Cocoa APIs. But eventually all the little limitations of Yue (many now resolved) and my need for deeper desktop integration forced my hand.[2]
My Lua bridge is definitely not the first, but most (all?) such projects are dead or dormant. Some might still be usable with some tweaking; I don't think out-of-the-box, though, which IIRC helped push me toward writing my own. My app is currently closed source. I've open source'd parts of it already (e.g. early version of a suite of LPeg parsers for X.509-based formats, posted to the Lua mailing list), but my Lua/Objective-C bridge is spread across several files (e.g. the objc_msgSend thunk permutation and code generator) and not something that can be easily dumped into a standalone form without a little refactoring. If I have the opportunity to do so, I may in the future. I just don't like publicly releasing anything that isn't usable out of the box. But if you contact me by e-mail I'd be happy to share the code: william@25thandClement.com or william@keymux.com.
[1] Yue also has JavaScript bindings, and both sets of bindings rely on a shared C++ framework, so Yue provides equal treatment to C++, JavaScript, and Lua applications.
[2] My app, KeyMux, is for integrating common open source toolchains and work flows with hardware-protected RSA and ECC keys, including the Apple T2 Secure Enclave, for which I had to write static C bindings to Apple's Security framework, the low-level public interfaces to which are straight C interfaces. So in truth I would have had to write Core Foundation bindings one way or another as Security heavily uses CFArray, CFDictionary, CFNumber, and CFString. But those bindings probably would have been much simpler and more basic if I knew I would be able to lean on the Objective-C frameworks (e.g. Foundation, AppKit) for other desktop integration tasks. All of this--the whole world of desktop GUI programming, not just Objective-C--was new territory for me, so at least I picked up a wealth of knowledge on my circuitous journey.
Yes as part of the GNUStep project [1]. You can compile Objective-C with Clang for any platform, including Windows, and link with the GNUStep Obj-C runtime. The big problem is outside of GNUStep and macOS you won't have any frameworks - not even NSString.
> I loved Objective-C very much (yes, really) and I'd like to continue using it after Apple phases it out
You're not alone. Unlike C++, Obj-C was a reasonable OO extension to C. It's a shame the language never received more love.
I was beginning to really feel my age that no one had made that reference.
(It's from the movie "Treasure of the Sierra Madre", which is worth checking out!)
"Badgers? Badgers? We don't need no stinking badgers!"
The underlying architecture of NeXT was largely adopted into OS X and iOS.
The GUI appearance evokes nostalgia for those that used it (the very first web browser was written within NeXT).
FWIW GNUstep is themable so it should be possible to customize it. Though i'm not aware of any that follows modern trends, but at least it is possible to make it kinda sorta like a broken telephone version of early Mac OS X using the Rik theme[0] (the screenshot also seems to be using a custom theme and setup for Window Maker too and judging from the shadows it most likely also uses Compiz as a compositor).
(Its a big reason why I stopped contributing to GNUStep, as the resistance to modernize at least a little bit was large).
You can use GNUstep with Window Maker (and many do) but you can also use it with KDE, GNOME, XFCE, FVWM, IceWM, JWM or whatever window manager you like. AFAIK GNUstep also has a Wayland backend so you could also use it with Wayland compositors.
Similarly you do not have to use Window Maker with GNUstep or any ObjC runtime or libraries, just use it by itself as a window manager. Personally i do not use GNUstep at all but i use Window Maker.
(note that Window Maker does create/use a GNUstep directory in the home directory but that is a historical artifact and IIRC in recent versions it can be made to use a directory inside .config instead).
Why is it that every OSS desktop has to look like a demo from the 70’s?
If GNUstep gains traction, there will almost certainly be a project to create a modern desktop. I personally like the NeXTSTEP UI, but I wouldn't mind something new.
I think that's backwards. They need to create a project for a modern desktop to gain traction.
You need some unixporn[0] in your life.
Also people have different tastes and preferences and like the NeXTStep or Win95 or OS/2 or BeOS or Classic Mac or whatever look.
Because you haven't sent the patches that would make it prettier (e.g. ones that would make it as pretty as, say, Mac OS).
There's always the form vs function debate but it's a shame that more doesn't manage to have both form and function if the respective specialists could coordinate
Yeah, no. I don't think you use macOS/win at all if you say stuff like that. It feels and always has felt rough around the edges.
In my opinion GNOME and GTK apps generally get those details more "correct", though GNOME 3 and up goes way overboard on padding. Strip that padding down with a theme and its design is solid though, and Cinnamon, XFCE, and MATE get these right out of the box with no modifications necessary.
I genuinely like and dislike most OS UIs I've tried. They all have things that irk me. While windows settings has gotten more consistent, it's also all the more painful when you had gotten used to the "old way" of doing things and where to look. If MS executives could just get TF out of their own way on some of the stupidity and force-feeding.
Mac, just feels a bit dated at this point, but the touchpad integration across all apps is great. Not to mention the macbook touchpads being second to none in terms of usability.
Linux, I can shift to almost exactly what I want. There are rough edges and spots you cannot reach via UI, but it mostly works without issue. Been using Budgie as my DE for over a year, fairly customized and like it a lot.
https://i.stack.imgur.com/JDDku.png
To my knowledge, modern GNOME does not have this which is sad. There's this webpage instead:
https://help.gnome.org/users/gnome-help/stable/shell-keyboar...
"Half-maximizing" windows with Super+Left and Super+Right is very handy when I need to see things side-by-side.
Moving windows from one screen to another by pressing Super and doing drag-and-drop, and moving windows across workspaces with Shift+Super+PgUp and Shift+Super+PgDown are also convenient.
As much as it's a lightweight DE, we're way past the point of CPU capability to render these basically for free, but it seems to be all over the place
I find it hilarious that we sharpened monitors so now we have to blur the rendering, because heaven forbid we see a pixel.
You gotta bandlimit your signals or you'll see aliasing. That's just how signal processing works. Imagine if your audio player's output voltage jumped between 16bit levels instead of smoothly transitioning. It would sound horrible. That's how bad jaggies look to people who didn't grow up with slow computers
Color is based on frequency. There's an inherent limit to the range of light colors our eyeballs can process.
> You gotta bandlimit your signals or you'll see aliasing.
When changing sampling rates. If the monitors resolution and the font resolution were identical, then would bandlimiting actually have any effect?
> Imagine if your audio player's output voltage jumped between 16bit levels instead of smoothly transitioning. It would sound horrible.
The brain processes sound logarithmically. Is the same true for vision? I mean, I watch movies at 24 frames per second, and yet, I'm usually incapable of perceiving this.
> That's how bad jaggies look to people who didn't grow up with slow computers
Anecdotally.. but if the computer is experiencing a limit in displaying full resolution data to me, I actually don't mind noticing that fact.
> If the monitors resolution and the font resolution were identical
Fonts are typically infinite resolution because they are small programs that you execute. Also see https://blog.mecheye.net/2012/12/bytecode/
> The brain processes sound logarithmically. Is the same true for vision?
If you're talking about brightness, it's a cube-root curve: https://en.wikipedia.org/wiki/Lightness#Relationship_to_valu...
> I watch movies at 24 frames per second, and yet, I'm usually incapable of perceiving this
Film projectors flash the same image multiple times because humans can easily notice 24fps. The lamp flickers and that's why movies are called "flicks". Good monitors flash each frame for only 1ms for the same reason: https://blurbusters.com/faq/motion-blur-reduction/
Try the UFO test: https://www.testufo.com/. If you genuinely can't see the difference between 30/60/120 Hz, you should get an eye exam because that's not normal.
Vector fonts and vector graphics are two different things. Fonts define an outline. You can programmatically displace points on that outline but you are still limited in the types of outputs you can define due to this restriction and to the overall number of points per glyph the font system allows.
They're pretty far from "infinite resolution" and the errors between screen space and font space are not particularly large and are probably not best understood through signal processing metaphors, was my point.
Look at where they are and where Gnome is now.
Saddest story in all of open source.
Even today people disable isolation to improve performance even though our desktops are faster than old supercomputers: https://www.microsoft.com/en-us/windows/learning-center/opti...
"Windows 11 security measures include Memory Integrity and Virtual Machine Platform (VMP) to protect against malware, which are features that can also disrupt gaming performance. If you choose to turn these features off before gaming, it can improve your performance and help you focus on the games at hand. Afterwards, it’s important to turn them on again since you are opening your PC up to risks while it’s less protected. For short periods, you might try turning off your Memory Integrity and VMP to see if you notice a difference."
Perhaps in the server world where uptime is critical. After all, that is Linux’s largest market share.
HPE makes a ton of money out of their NonStop line of uncrashable machines.
Knowing how to pick your battles is a need in OSS development