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.