Swift Static Linux SDK
Static vs dynamic linking and distros
- Big subthread on static linking (Swift static Linux SDK, Rust/Go culture) vs classic distro-managed shared libraries.
- Pro-static side: vendoring dependencies avoids distro-induced version skew, makes builds reproducible, and simplifies distribution (single binary, works across many distros, fewer “dependency hell” issues).
- Pro-dynamic side: distros can patch one shared library to fix many packages at once; rebuilding thousands of statically-linked binaries on a vuln is expensive and often unrealistic.
- Several note that Rust/Go can link dynamically, but tooling and culture strongly push “static everything”; Swift is praised if it allows real choice.
Security, vulnerabilities, and SBOMs
- Critics of static linking highlight past crises (e.g., zlib/xz-like issues): tracking every embedded copy is painful; you often don’t know which version is in a random binary.
- Others argue rebuild storms are acceptable and that binaries should ship an embedded manifest/SBOM of their vendored deps; Go is cited as already doing this.
- Disagreement over whether static linking is a “security nightmare” (opaque dependency graph, slow patch propagation) vs dynamic linking being a risk (uncertain code actually executed at runtime).
Swift on Linux, ABI, and distribution
- Swift binaries on Linux still depend on some system libraries; ABI is explicitly stable only on Apple OSes. On Linux, ABI stability is “unclear” and would likely need distro support.
- New static SDK plus musl-style targets make Swift more competitive with Go for easy container distribution (e.g., Alpine).
- Some see this as aligning with Apple’s broader push: embedded Swift, WASM targets, user-definable platforms.
Language comparisons and ergonomics
- Multiple commenters are enthusiastic about Swift 6: strong type system, no tracing GC (ARC instead), ADTs, protocols (traits), macros, data-race-free concurrency, distributed actors, C++ interop, embedded mode, and upcoming WASM.
- Some describe Swift as “better Go” and “better Rust for app dev,” especially with richer stdlib, async/await, testing, and ergonomics like named arguments and advanced enums.
- Counterpoints: Swift compilation is much slower than Go and often slower than C++ with templates; tooling (SPM configuration, compiler diagnostics, macro setup) has “sharp edges.”
- Others feel the language has become complex and “baby C++”-like, though some argue most developers only need a simple subset.
Ecosystem, server-side, and tooling
- Server-side Swift interest exists (e.g., Vapor), but several say the non-Apple ecosystem is still relatively immature compared to JVM, Go, or Rust.
- Some report painful past experience with server-side Swift (Apple-first design decisions, Linux being second-class), and now prefer Kotlin/Java.
- LSP support for VS Code is described as usable but not yet on par with top-tier ecosystems (missing richer refactors, etc.).
Cross-platform UI and other platforms
- SwiftUI itself is closed-source and Apple-only; third-party SwiftUI-like frameworks (Tokamak, SwiftCrossUI) and wrappers around GTK/Qt/LVGL exist but are seen as not yet mature for serious cross-platform products.
- Embedded Swift and Swift-on-WASM examples are emerging and generate excitement, though they are still early-stage.