January 4, 2026

Mac vibes on Debian? Cue popcorn

Swift interface for GNUStep's version of AppKit

Swift meets GNUstep: Mac-style apps on Linux has everyone arguing

TLDR: A new Swift-to-GNUstep bridge aims to bring Mac-style apps to Debian Linux, but it’s experimental and manual. Commenters split between excitement for cross-platform Swift and skepticism about fragile memory juggling and flaky demos, making it a flashy promise with DIY headaches.

Swift—the language behind many Mac apps—just got a DIY bridge to GNUstep, an open-source clone of Apple’s interface toolkit, so you can chase Mac vibes on Debian Linux. The project asks you to install GNUstep Desktop and Swift 5.8.1, then manually copy a “Resources” folder into a debug build. Cue the comment section: half cheering, half clutching pearls. Fans are giddy about writing Mac-like apps on Linux, while skeptics roast the "HelloWorld often not working" admission like it’s a meme. The hot debate? Memory management—old-school “retain and release” vs Swift’s promised safety. One side calls it “retro hardcore,” the other says “why risk crashes for nostalgia?” The workaround for calling Objective-C methods (the tech behind Apple’s old-school app framework) got labeled “smart” and then instantly rebranded by the crowd as “smart-ish,” with jokes about duct tape and destiny. Meanwhile, dreamers love the idea of wrapping pure Swift objects so they can live in old Objective-C containers, calling it a bridge between generations. Pragmatists groan: “If I have to hand-move files, I’m out.” It’s pure internet theater—hope, snark, and a tiny window test that actually runs.

Key Points

  • The project provides a Swift interface to GNUstep’s AppKit, targeting OnFlapp’s GNUstep Desktop on Debian with Swift 5.8.1.
  • Resource files (e.g., GORM and Info_gnustep.plist) must currently be copied manually into .build/build/debug/Resources.
  • GNUStepNSObjectWrapper manages instantiation and retention of GNUstep Objective‑C NSObjects; wrapping existing pointers does not retain.
  • GNUStepNSObjectSubclassConstructor registers new ObjC subclasses and adds an ___swiftPtr ivar to link Swift and ObjC instances.
  • Due to issues calling objc_msgSend/objc_msgSend_stret from Swift, method calls use a custom objc_smart_getIMP based on class_getMethodImplementation and unsafeBitCast; an NSSwiftObject-style wrapper is proposed for storing Swift objects in NSArray/NSDictionary.

Hottest takes

"This is held together with duct tape and retain()" — compile_cry
"Mac-style UI on Linux? Shut up and take my .deb" — nostalgify
"If HelloWorld 'often not working', I’m out" — gtk_or_gtfo
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.