The Swift Package Index logo.Swift Package Index

Build Information

Failed to build stringray, reference 0.4.0 (ee805f), with Swift 6.2 for Linux on 17 Jun 2025 15:59:58 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4606859-2":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:basic-6.2-latest swift build --triple x86_64-unknown-linux-gnu 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 4.64.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/g-off/stringray.git
Reference: 0.4.0
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/g-off/stringray
 * tag               0.4.0      -> FETCH_HEAD
HEAD is now at ee805f8 allows sort to operate on a single locale instead of all
Cloned https://github.com/g-off/stringray.git
Revision (git rev-parse @):
ee805f8067165934b7b471e8001780873f181619
SUCCESS checkout https://github.com/g-off/stringray.git at 0.4.0
========================================
Build
========================================
Selected platform:         linux
Swift version:             6.2
Building package at path:  $PWD
https://github.com/g-off/stringray.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4606859-2":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:basic-6.2-latest swift build --triple x86_64-unknown-linux-gnu 2>&1
basic-6.2-latest: Pulling from finestructure/spi-images
Digest: sha256:f81a7bd7aa87a0f81848d48c5bcc03f5f78deebd37fa5f9be9913077205d3687
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:basic-6.2-latest
Fetching https://github.com/jpsim/Yams.git
Fetching https://github.com/g-Off/CommandRegistry.git
Fetching https://github.com/g-Off/XcodeProject.git
Fetching https://github.com/scottrhoyt/SwiftyTextTable.git
Fetching https://github.com/apple/swift-package-manager.git
[2/33] Fetching commandregistry
[2/646] Fetching commandregistry, xcodeproject
[615/1575] Fetching commandregistry, xcodeproject, swiftytexttable
Fetched https://github.com/g-Off/XcodeProject.git from cache (0.52s)
[745/962] Fetching commandregistry, swiftytexttable
[931/11821] Fetching commandregistry, swiftytexttable, yams
[11790/168474] Fetching commandregistry, swiftytexttable, yams, swift-package-manager
Fetched https://github.com/g-Off/CommandRegistry.git from cache (2.26s)
Fetched https://github.com/jpsim/Yams.git from cache (2.32s)
[16595/157582] Fetching swiftytexttable, swift-package-manager
Fetched https://github.com/scottrhoyt/SwiftyTextTable.git from cache (20.22s)
Fetched https://github.com/apple/swift-package-manager.git from cache (20.63s)
Computing version for https://github.com/jpsim/Yams.git
Computed https://github.com/jpsim/Yams.git at 1.0.2 (21.51s)
Computing version for https://github.com/g-Off/CommandRegistry.git
Computed https://github.com/g-Off/CommandRegistry.git at 0.1.2 (0.86s)
Computing version for https://github.com/apple/swift-package-manager.git
Computed https://github.com/apple/swift-package-manager.git at 0.3.0 (8.97s)
Computing version for https://github.com/scottrhoyt/SwiftyTextTable.git
Computed https://github.com/scottrhoyt/SwiftyTextTable.git at 0.9.0 (1.57s)
Computing version for https://github.com/g-Off/XcodeProject.git
Computed https://github.com/g-Off/XcodeProject.git at 0.5.1 (1.88s)
Fetching https://github.com/g-Off/ObjectCoder.git
Fetching https://github.com/mxcl/Version.git
[1/33] Fetching objectcoder
[34/326] Fetching objectcoder, version
Fetched https://github.com/g-Off/ObjectCoder.git from cache (0.46s)
Fetched https://github.com/mxcl/Version.git from cache (0.46s)
Computing version for https://github.com/g-Off/ObjectCoder.git
Computed https://github.com/g-Off/ObjectCoder.git at 0.1.0 (1.01s)
Computing version for https://github.com/mxcl/Version.git
Computed https://github.com/mxcl/Version.git at 1.2.0 (2.77s)
Creating working copy for https://github.com/scottrhoyt/SwiftyTextTable.git
Working copy of https://github.com/scottrhoyt/SwiftyTextTable.git resolved at 0.9.0
Creating working copy for https://github.com/g-Off/XcodeProject.git
Working copy of https://github.com/g-Off/XcodeProject.git resolved at 0.5.1
Creating working copy for https://github.com/mxcl/Version.git
Working copy of https://github.com/mxcl/Version.git resolved at 1.2.0
Creating working copy for https://github.com/apple/swift-package-manager.git
Working copy of https://github.com/apple/swift-package-manager.git resolved at 0.3.0
Creating working copy for https://github.com/jpsim/Yams.git
Working copy of https://github.com/jpsim/Yams.git resolved at 1.0.2
Creating working copy for https://github.com/g-Off/ObjectCoder.git
Working copy of https://github.com/g-Off/ObjectCoder.git resolved at 0.1.0
Creating working copy for https://github.com/g-Off/CommandRegistry.git
Working copy of https://github.com/g-Off/CommandRegistry.git resolved at 0.1.2
Building for debugging...
[0/34] Write sources
[12/34] Compiling clibc libc.c
[13/34] Compiling writer.c
[14/34] Compiling reader.c
[15/34] Compiling parser.c
[16/34] Compiling api.c
[17/34] Write swift-version-24593BA9C3E375BF.txt
[17/34] Compiling emitter.c
[19/34] Compiling scanner.c
[21/85] Emitting module RayGun
[22/87] Compiling Yams Mark.swift
[23/87] Compiling Yams Node.Mapping.swift
[24/89] Compiling Version Version.swift
[25/89] Compiling Version Version+Range.swift
[26/89] Compiling Yams YamlError.swift
[27/89] Compiling Yams shim.swift
[28/89] Emitting module SPMLibc
[29/89] Compiling SPMLibc libc.swift
[31/90] Compiling Yams String+Yams.swift
[32/90] Compiling Yams Tag.swift
[32/94] Wrapping AST for SPMLibc for debugging
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:163:55: warning: 'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior. [#DeprecatedDeclaration]
161 | 		if options.contains(.lineNumbers) {
162 | 			baseString.enumerateSubstrings(in: baseString.startIndex..<baseString.endIndex, options: [.byLines, .substringNotRequired]) { (_, substringRange, _, stop) in
163 | 				newlineLocations.append(substringRange.lowerBound.encodedOffset)
    |                                                       `- warning: 'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior. [#DeprecatedDeclaration]
164 | 			}
165 | 		}
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:174:15: warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
172 | 				entry.location = StringsTable.Entry.Location()
173 | 			}
174 | 			if scanner.scanString("/*", into: nil) {
    |               |- warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
    |               `- note: use 'scanString(_:)' instead
175 | 				var scannedComment: NSString?
176 | 				if options.contains(.lineNumbers) {
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:179:36: error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
177 | 					entry.location?.comment = lineNumber(scanLocation: scanner.scanLocation, newlineLocations: newlineLocations)
178 | 				}
179 | 				scanner.scanUpTo("*/\n", into: &scannedComment)
    |                                    |- error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
    |                                    `- note: arguments to generic parameter 'Pointee' ('NSString?' and 'String?') are expected to be equal
180 | 				scanner.scanString("*/\n", into: nil)
181 | 				if let scannedComment = scannedComment?.trimmingCharacters(in: CharacterSet.whitespaces) as String? {
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:180:13: warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
178 | 				}
179 | 				scanner.scanUpTo("*/\n", into: &scannedComment)
180 | 				scanner.scanString("*/\n", into: nil)
    |             |- warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
    |             `- note: use 'scanString(_:)' instead
181 | 				if let scannedComment = scannedComment?.trimmingCharacters(in: CharacterSet.whitespaces) as String? {
182 | 					entry.comment = scannedComment
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:185:12: warning: 'scanCharacters(from:into:)' is deprecated: renamed to 'scanCharacters(from:)' [#DeprecatedDeclaration]
183 | 				}
184 | 			}
185 | 			scanner.scanCharacters(from: .whitespacesAndNewlines, into: nil)
    |            |- warning: 'scanCharacters(from:into:)' is deprecated: renamed to 'scanCharacters(from:)' [#DeprecatedDeclaration]
    |            `- note: use 'scanCharacters(from:)' instead
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:185:12: warning: result of call to 'scanCharacters(from:into:)' is unused [#no-usage]
183 | 				}
184 | 			}
185 | 			scanner.scanCharacters(from: .whitespacesAndNewlines, into: nil)
    |            `- warning: result of call to 'scanCharacters(from:into:)' is unused [#no-usage]
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:187:34: error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
185 | 			scanner.scanCharacters(from: .whitespacesAndNewlines, into: nil)
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
    |                                  |- error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
    |                                  `- note: arguments to generic parameter 'Pointee' ('NSString?' and 'String?') are expected to be equal
188 | 			scanner.scanString(";\n", into: nil)
189 | 			if options.contains(.lineNumbers) {
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:188:12: warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
188 | 			scanner.scanString(";\n", into: nil)
    |            |- warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
    |            `- note: use 'scanString(_:)' instead
189 | 			if options.contains(.lineNumbers) {
190 | 				entry.location?.line = lineNumber(scanLocation: scanner.scanLocation, newlineLocations: newlineLocations)
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:215:3: warning: result of call to 'write(_:maxLength:)' is unused [#no-usage]
213 | 	func write(string: String) {
214 | 		let encodedDataArray = [UInt8](string.utf8)
215 | 		write(encodedDataArray, maxLength: encodedDataArray.count)
    |   `- warning: result of call to 'write(_:maxLength:)' is unused [#no-usage]
216 | 	}
217 | }
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:163:55: warning: 'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior. [#DeprecatedDeclaration]
161 | 		if options.contains(.lineNumbers) {
162 | 			baseString.enumerateSubstrings(in: baseString.startIndex..<baseString.endIndex, options: [.byLines, .substringNotRequired]) { (_, substringRange, _, stop) in
163 | 				newlineLocations.append(substringRange.lowerBound.encodedOffset)
    |                                                       `- warning: 'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior. [#DeprecatedDeclaration]
164 | 			}
165 | 		}
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:174:15: warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
172 | 				entry.location = StringsTable.Entry.Location()
173 | 			}
174 | 			if scanner.scanString("/*", into: nil) {
    |               |- warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
    |               `- note: use 'scanString(_:)' instead
175 | 				var scannedComment: NSString?
176 | 				if options.contains(.lineNumbers) {
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:179:36: error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
177 | 					entry.location?.comment = lineNumber(scanLocation: scanner.scanLocation, newlineLocations: newlineLocations)
178 | 				}
179 | 				scanner.scanUpTo("*/\n", into: &scannedComment)
    |                                    |- error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
    |                                    `- note: arguments to generic parameter 'Pointee' ('NSString?' and 'String?') are expected to be equal
180 | 				scanner.scanString("*/\n", into: nil)
181 | 				if let scannedComment = scannedComment?.trimmingCharacters(in: CharacterSet.whitespaces) as String? {
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:180:13: warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
178 | 				}
179 | 				scanner.scanUpTo("*/\n", into: &scannedComment)
180 | 				scanner.scanString("*/\n", into: nil)
    |             |- warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
    |             `- note: use 'scanString(_:)' instead
181 | 				if let scannedComment = scannedComment?.trimmingCharacters(in: CharacterSet.whitespaces) as String? {
182 | 					entry.comment = scannedComment
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:185:12: warning: 'scanCharacters(from:into:)' is deprecated: renamed to 'scanCharacters(from:)' [#DeprecatedDeclaration]
183 | 				}
184 | 			}
185 | 			scanner.scanCharacters(from: .whitespacesAndNewlines, into: nil)
    |            |- warning: 'scanCharacters(from:into:)' is deprecated: renamed to 'scanCharacters(from:)' [#DeprecatedDeclaration]
    |            `- note: use 'scanCharacters(from:)' instead
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:185:12: warning: result of call to 'scanCharacters(from:into:)' is unused [#no-usage]
183 | 				}
184 | 			}
185 | 			scanner.scanCharacters(from: .whitespacesAndNewlines, into: nil)
    |            `- warning: result of call to 'scanCharacters(from:into:)' is unused [#no-usage]
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:187:34: error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
185 | 			scanner.scanCharacters(from: .whitespacesAndNewlines, into: nil)
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
    |                                  |- error: cannot convert value of type 'UnsafeMutablePointer<NSString?>' to expected argument type 'UnsafeMutablePointer<String?>'
    |                                  `- note: arguments to generic parameter 'Pointee' ('NSString?' and 'String?') are expected to be equal
188 | 			scanner.scanString(";\n", into: nil)
189 | 			if options.contains(.lineNumbers) {
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:188:12: warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
186 | 			var scannedString: NSString?
187 | 			scanner.scanUpTo(";\n", into: &scannedString)
188 | 			scanner.scanString(";\n", into: nil)
    |            |- warning: 'scanString(_:into:)' is deprecated: renamed to 'scanString(_:)' [#DeprecatedDeclaration]
    |            `- note: use 'scanString(_:)' instead
189 | 			if options.contains(.lineNumbers) {
190 | 				entry.location?.line = lineNumber(scanLocation: scanner.scanLocation, newlineLocations: newlineLocations)
/host/spi-builder-workspace/Sources/RayGun/Strings Table/StringsTableLoader.swift:215:3: warning: result of call to 'write(_:maxLength:)' is unused [#no-usage]
213 | 	func write(string: String) {
214 | 		let encodedDataArray = [UInt8](string.utf8)
215 | 		write(encodedDataArray, maxLength: encodedDataArray.count)
    |   `- warning: result of call to 'write(_:maxLength:)' is unused [#no-usage]
216 | 	}
217 | }
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[36/101] Compiling POSIX env.swift
[37/101] Compiling POSIX exit.swift
[38/101] Compiling ObjectCoder EncodingStorage.swift
[39/102] Compiling Yams Node.Scalar.swift
[40/102] Compiling Yams Node.Sequence.swift
[41/102] Compiling ObjectCoder ObjectEncoder+SingleValueContainer.swift
[44/102] Compiling POSIX Error.swift
[45/102] Compiling POSIX chdir.swift
[46/102] Compiling POSIX realpath.swift
[47/103] Compiling Yams Representer.swift
[48/103] Compiling Yams Resolver.swift
[49/103] Compiling Yams Node.swift
[50/103] Compiling Yams Parser.swift
[51/103] Emitting module SwiftyTextTable
[52/103] Compiling SwiftyTextTable TextTable.swift
[53/104] Compiling POSIX getcwd.swift
[54/104] Compiling POSIX isatty.swift
[60/104] Compiling POSIX rename.swift
[61/104] Compiling POSIX stat.swift
[62/104] Compiling ObjectCoder ObjectEncoder+UnkeyedContainer.swift
[63/104] Compiling POSIX readdir.swift
[64/104] Compiling ObjectCoder ObjectEncoder+KeyedContainer.swift
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Encoder/Container/ObjectEncoder+KeyedContainer.swift:31:12: error: cannot assign through subscript: subscript is get-only
 29 |
 30 | 	mutating func encodeNil(forKey key: Key) throws {
 31 | 		container[_converted(key)] = encoder.boxer.encodedNull(encoder)
    |            `- error: cannot assign through subscript: subscript is get-only
 32 | 	}
 33 |
[65/104] Compiling Version Version+Comparable.swift
[66/104] Emitting module Version
[67/104] Compiling Version Version+Codable.swift
[68/104] Compiling Version Version+Foundation.swift
[69/105] Compiling POSIX usleep.swift
[77/105] Emitting module POSIX
[78/106] Emitting module ObjectCoder
[86/106] Emitting module Yams
[89/106] Compiling ObjectCoder ObjectEncoder.swift
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:16:18: error: cannot find 'kCFBooleanTrue' in scope
 14 | 		if let number = value as? NSNumber {
 15 | 			// TODO: Add a flag to coerce non-boolean numbers into Bools?
 16 | 			if number === kCFBooleanTrue as NSNumber {
    |                  `- error: cannot find 'kCFBooleanTrue' in scope
 17 | 				return true
 18 | 			} else if number === kCFBooleanFalse as NSNumber {
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:18:25: error: cannot find 'kCFBooleanFalse' in scope
 16 | 			if number === kCFBooleanTrue as NSNumber {
 17 | 				return true
 18 | 			} else if number === kCFBooleanFalse as NSNumber {
    |                         `- error: cannot find 'kCFBooleanFalse' in scope
 19 | 				return false
 20 | 			}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:35:53: error: cannot find 'kCFBooleanTrue' in scope
 33 | 		guard !(value is NSNull) else { return nil }
 34 |
 35 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 36 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 37 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:35:80: error: cannot find 'kCFBooleanFalse' in scope
 33 | 		guard !(value is NSNull) else { return nil }
 34 |
 35 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 36 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 37 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:50:53: error: cannot find 'kCFBooleanTrue' in scope
 48 | 		guard !(value is NSNull) else { return nil }
 49 |
 50 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 51 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 52 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:50:80: error: cannot find 'kCFBooleanFalse' in scope
 48 | 		guard !(value is NSNull) else { return nil }
 49 |
 50 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 51 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 52 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:65:53: error: cannot find 'kCFBooleanTrue' in scope
 63 | 		guard !(value is NSNull) else { return nil }
 64 |
 65 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 66 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 67 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:65:80: error: cannot find 'kCFBooleanFalse' in scope
 63 | 		guard !(value is NSNull) else { return nil }
 64 |
 65 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 66 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 67 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:80:53: error: cannot find 'kCFBooleanTrue' in scope
 78 | 		guard !(value is NSNull) else { return nil }
 79 |
 80 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 81 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 82 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:80:80: error: cannot find 'kCFBooleanFalse' in scope
 78 | 		guard !(value is NSNull) else { return nil }
 79 |
 80 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 81 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 82 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:95:53: error: cannot find 'kCFBooleanTrue' in scope
 93 | 		guard !(value is NSNull) else { return nil }
 94 |
 95 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 96 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 97 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:95:80: error: cannot find 'kCFBooleanFalse' in scope
 93 | 		guard !(value is NSNull) else { return nil }
 94 |
 95 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 96 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 97 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:110:53: error: cannot find 'kCFBooleanTrue' in scope
108 | 		guard !(value is NSNull) else { return nil }
109 |
110 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
111 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
112 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:110:80: error: cannot find 'kCFBooleanFalse' in scope
108 | 		guard !(value is NSNull) else { return nil }
109 |
110 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
111 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
112 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:125:53: error: cannot find 'kCFBooleanTrue' in scope
123 | 		guard !(value is NSNull) else { return nil }
124 |
125 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
126 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
127 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:125:80: error: cannot find 'kCFBooleanFalse' in scope
123 | 		guard !(value is NSNull) else { return nil }
124 |
125 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
126 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
127 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:140:53: error: cannot find 'kCFBooleanTrue' in scope
138 | 		guard !(value is NSNull) else { return nil }
139 |
140 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
141 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
142 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:140:80: error: cannot find 'kCFBooleanFalse' in scope
138 | 		guard !(value is NSNull) else { return nil }
139 |
140 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
141 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
142 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:155:53: error: cannot find 'kCFBooleanTrue' in scope
153 | 		guard !(value is NSNull) else { return nil }
154 |
155 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
156 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
157 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:155:80: error: cannot find 'kCFBooleanFalse' in scope
153 | 		guard !(value is NSNull) else { return nil }
154 |
155 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
156 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
157 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:170:53: error: cannot find 'kCFBooleanTrue' in scope
168 | 		guard !(value is NSNull) else { return nil }
169 |
170 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
171 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
172 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:170:80: error: cannot find 'kCFBooleanFalse' in scope
168 | 		guard !(value is NSNull) else { return nil }
169 |
170 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
171 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
172 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:16:18: error: cannot find 'kCFBooleanTrue' in scope
 14 | 		if let number = value as? NSNumber {
 15 | 			// TODO: Add a flag to coerce non-boolean numbers into Bools?
 16 | 			if number === kCFBooleanTrue as NSNumber {
    |                  `- error: cannot find 'kCFBooleanTrue' in scope
 17 | 				return true
 18 | 			} else if number === kCFBooleanFalse as NSNumber {
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:18:25: error: cannot find 'kCFBooleanFalse' in scope
 16 | 			if number === kCFBooleanTrue as NSNumber {
 17 | 				return true
 18 | 			} else if number === kCFBooleanFalse as NSNumber {
    |                         `- error: cannot find 'kCFBooleanFalse' in scope
 19 | 				return false
 20 | 			}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:35:53: error: cannot find 'kCFBooleanTrue' in scope
 33 | 		guard !(value is NSNull) else { return nil }
 34 |
 35 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 36 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 37 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:35:80: error: cannot find 'kCFBooleanFalse' in scope
 33 | 		guard !(value is NSNull) else { return nil }
 34 |
 35 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 36 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 37 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:50:53: error: cannot find 'kCFBooleanTrue' in scope
 48 | 		guard !(value is NSNull) else { return nil }
 49 |
 50 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 51 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 52 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:50:80: error: cannot find 'kCFBooleanFalse' in scope
 48 | 		guard !(value is NSNull) else { return nil }
 49 |
 50 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 51 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 52 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:65:53: error: cannot find 'kCFBooleanTrue' in scope
 63 | 		guard !(value is NSNull) else { return nil }
 64 |
 65 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 66 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 67 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:65:80: error: cannot find 'kCFBooleanFalse' in scope
 63 | 		guard !(value is NSNull) else { return nil }
 64 |
 65 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 66 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 67 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:80:53: error: cannot find 'kCFBooleanTrue' in scope
 78 | 		guard !(value is NSNull) else { return nil }
 79 |
 80 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 81 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 82 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:80:80: error: cannot find 'kCFBooleanFalse' in scope
 78 | 		guard !(value is NSNull) else { return nil }
 79 |
 80 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 81 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 82 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:95:53: error: cannot find 'kCFBooleanTrue' in scope
 93 | 		guard !(value is NSNull) else { return nil }
 94 |
 95 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
 96 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 97 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:95:80: error: cannot find 'kCFBooleanFalse' in scope
 93 | 		guard !(value is NSNull) else { return nil }
 94 |
 95 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
 96 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
 97 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:110:53: error: cannot find 'kCFBooleanTrue' in scope
108 | 		guard !(value is NSNull) else { return nil }
109 |
110 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
111 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
112 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:110:80: error: cannot find 'kCFBooleanFalse' in scope
108 | 		guard !(value is NSNull) else { return nil }
109 |
110 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
111 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
112 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:125:53: error: cannot find 'kCFBooleanTrue' in scope
123 | 		guard !(value is NSNull) else { return nil }
124 |
125 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
126 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
127 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:125:80: error: cannot find 'kCFBooleanFalse' in scope
123 | 		guard !(value is NSNull) else { return nil }
124 |
125 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
126 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
127 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:140:53: error: cannot find 'kCFBooleanTrue' in scope
138 | 		guard !(value is NSNull) else { return nil }
139 |
140 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
141 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
142 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:140:80: error: cannot find 'kCFBooleanFalse' in scope
138 | 		guard !(value is NSNull) else { return nil }
139 |
140 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
141 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
142 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:155:53: error: cannot find 'kCFBooleanTrue' in scope
153 | 		guard !(value is NSNull) else { return nil }
154 |
155 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
156 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
157 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:155:80: error: cannot find 'kCFBooleanFalse' in scope
153 | 		guard !(value is NSNull) else { return nil }
154 |
155 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
156 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
157 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:170:53: error: cannot find 'kCFBooleanTrue' in scope
168 | 		guard !(value is NSNull) else { return nil }
169 |
170 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                     `- error: cannot find 'kCFBooleanTrue' in scope
171 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
172 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Decoder/_NSObjectDecoder+Unboxing.swift:170:80: error: cannot find 'kCFBooleanFalse' in scope
168 | 		guard !(value is NSNull) else { return nil }
169 |
170 | 		guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
    |                                                                                `- error: cannot find 'kCFBooleanFalse' in scope
171 | 			throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
172 | 		}
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Encoder/Container/ObjectEncoder+Boxing.swift:23:35: error: value of type 'AnyClass' (aka 'any AnyObject.Type') has no member 'superclass'
 21 | 		if from == to { return 0 }
 22 | 		guard let from = from as? AnyClass else { return nil }
 23 | 		guard let fromSuperclass = from.superclass() else { return nil }
    |                                   `- error: value of type 'AnyClass' (aka 'any AnyObject.Type') has no member 'superclass'
 24 | 		guard let distance = matchDistance(from: fromSuperclass, to: to) else { return nil }
 25 | 		return distance + 1
/host/spi-builder-workspace/.build/checkouts/ObjectCoder/Sources/ObjectCoder/Encoder/Container/ObjectEncoder+Boxing.swift:23:35: error: value of type 'AnyClass' (aka 'any AnyObject.Type') has no member 'superclass'
 21 | 		if from == to { return 0 }
 22 | 		guard let from = from as? AnyClass else { return nil }
 23 | 		guard let fromSuperclass = from.superclass() else { return nil }
    |                                   `- error: value of type 'AnyClass' (aka 'any AnyObject.Type') has no member 'superclass'
 24 | 		guard let distance = matchDistance(from: fromSuperclass, to: to) else { return nil }
 25 | 		return distance + 1
[94/107] Wrapping AST for SwiftyTextTable for debugging
BUILD FAILURE 6.2 linux