The Swift Linux Port
+ +With the launch of the open source Swift project, we are also releasing +a port that works with the Linux operating system! You can build it from +the Swift sources or download pre-built binaries for Ubuntu. The port +is still a work in progress but we’re happy to say that it is usable +today for experimentation. Currently x86_64 is the only supported +architecture on Linux.
+ +Here are a few highlights of what’s working in the port today:
+ +-
+
-
+
Swift without the Objective-C Runtime: Swift on Linux does not +depend on the Objective-C runtime nor includes it. While Swift was +designed to interoperate closely with Objective-C when it is present, +it was also designed to work in environments where the Objective-C +runtime does not exist.
+
+ -
+
The core Swift Language and Standard Library on Linux shares most of +the same implementation and APIs as on Apple platforms. There are some +slight differences of behavior because of the absence of the +Objective-C runtime on Linux (noted below).
+
+ -
+
The Glibc Module: Most of the Linux C standard library is available +through this module similar to the Darwin module on Apple platforms. +Some headers aren’t yet imported into the module, such as tgmath.h.
+ +To try it out, just
+import Glibc
.
+ -
+
Swift Core Libraries: The Core Libraries provide implementations +of core APIs from Foundation and XCTest to be used on Linux without +Objective-C . The intention is that these APIs are available in a +cross-platform manner regardless of whether you are using Swift on +Apple’s platforms or Swift on Linux.
+
+ -
+
LLDB Swift debugging and the REPL: You can debug your Swift +binaries and experiment in the REPL just like you do on OS X.
+
+ -
+
The Swift Package Manager is a first class citizen as it is on +Apple’s platforms.
+
+
Here are some things that aren’t quite working yet or are planned for +the future:
+ +-
+
-
+
libdispatch: Part of the Core Libraries, updated Linux support is +in progress. You can follow development on the libdispatch project on +GitHub.
+
+ -
+
Some C APIs: Although this is generally true for all of our +supported platforms, a few constructs in C aren’t imported yet into +Swift. This will cause some APIs to be unavailable, such as those that +contain varargs /
+va_list
. However, in recent months Swift’s +interoperability with C has significantly advanced, gaining support +for named and anonymous unions, anonymous structs, and bitfields.
+ -
+
Some
+String
APIs: The Standard Library’sString
is missing implementations +of several important APIs because they are currently tied to the +implementation ofNSString
on Apple’s platforms.
+ -
+
Runtime Introspection: When a Swift class on Apple’s platforms is +marked
+@objc
or subclassesNSObject
you can use the Objective-C +runtime to enumerate available methods on an object or call methods +using selectors. Such capabilities are absent because they depend on +the Objective-C runtime.
+ -
+
+Array<T> as? Array<S>
: Some mechanisms, such as casting +containers with different associated types, currently do not work as +they relied on bridging mechanisms with Objective-C.
+
We’re really excited to be able to release the open source project with +a great head start for Linux support that you can try right now! There +is still plenty of work to be done, so we hope to see you contribute to +Swift to make the Linux port even more complete.
+ + + + + + +