Annotation of embedaddon/curl/docs/INSTALL.md, revision 1.1
1.1 ! misho 1: # how to install curl and libcurl
! 2:
! 3: ## Installing Binary Packages
! 4:
! 5: Lots of people download binary distributions of curl and libcurl. This
! 6: document does not describe how to install curl or libcurl using such a binary
! 7: package. This document describes how to compile, build and install curl and
! 8: libcurl from source code.
! 9:
! 10: ## Building using vcpkg
! 11:
! 12: You can download and install curl and libcurl using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
! 13:
! 14: git clone https://github.com/Microsoft/vcpkg.git
! 15: cd vcpkg
! 16: ./bootstrap-vcpkg.sh
! 17: ./vcpkg integrate install
! 18: vcpkg install curl[tool]
! 19:
! 20: The curl port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
! 21:
! 22: ## Building from git
! 23:
! 24: If you get your code off a git repository instead of a release tarball, see
! 25: the `GIT-INFO` file in the root directory for specific instructions on how to
! 26: proceed.
! 27:
! 28: # Unix
! 29:
! 30: A normal Unix installation is made in three or four steps (after you've
! 31: unpacked the source archive):
! 32:
! 33: ./configure
! 34: make
! 35: make test (optional)
! 36: make install
! 37:
! 38: You probably need to be root when doing the last command.
! 39:
! 40: Get a full listing of all available configure options by invoking it like:
! 41:
! 42: ./configure --help
! 43:
! 44: If you want to install curl in a different file hierarchy than `/usr/local`,
! 45: specify that when running configure:
! 46:
! 47: ./configure --prefix=/path/to/curl/tree
! 48:
! 49: If you have write permission in that directory, you can do 'make install'
! 50: without being root. An example of this would be to make a local install in
! 51: your own home directory:
! 52:
! 53: ./configure --prefix=$HOME
! 54: make
! 55: make install
! 56:
! 57: The configure script always tries to find a working SSL library unless
! 58: explicitly told not to. If you have OpenSSL installed in the default search
! 59: path for your compiler/linker, you don't need to do anything special. If you
! 60: have OpenSSL installed in `/usr/local/ssl`, you can run configure like:
! 61:
! 62: ./configure --with-ssl
! 63:
! 64: If you have OpenSSL installed somewhere else (for example, `/opt/OpenSSL`) and
! 65: you have pkg-config installed, set the pkg-config path first, like this:
! 66:
! 67: env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
! 68:
! 69: Without pkg-config installed, use this:
! 70:
! 71: ./configure --with-ssl=/opt/OpenSSL
! 72:
! 73: If you insist on forcing a build without SSL support, even though you may
! 74: have OpenSSL installed in your system, you can run configure like this:
! 75:
! 76: ./configure --without-ssl
! 77:
! 78: If you have OpenSSL installed, but with the libraries in one place and the
! 79: header files somewhere else, you have to set the `LDFLAGS` and `CPPFLAGS`
! 80: environment variables prior to running configure. Something like this should
! 81: work:
! 82:
! 83: CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" ./configure
! 84:
! 85: If you have shared SSL libs installed in a directory where your run-time
! 86: linker doesn't find them (which usually causes configure failures), you can
! 87: provide this option to gcc to set a hard-coded path to the run-time linker:
! 88:
! 89: LDFLAGS=-Wl,-R/usr/local/ssl/lib ./configure --with-ssl
! 90:
! 91: ## More Options
! 92:
! 93: To force a static library compile, disable the shared library creation by
! 94: running configure like:
! 95:
! 96: ./configure --disable-shared
! 97:
! 98: To tell the configure script to skip searching for thread-safe functions, add
! 99: an option like:
! 100:
! 101: ./configure --disable-thread
! 102:
! 103: If you're a curl developer and use gcc, you might want to enable more debug
! 104: options with the `--enable-debug` option.
! 105:
! 106: curl can be built to use a whole range of libraries to provide various useful
! 107: services, and configure will try to auto-detect a decent default. But if you
! 108: want to alter it, you can select how to deal with each individual library.
! 109:
! 110: ## Select TLS backend
! 111:
! 112: The default OpenSSL configure check will also detect and use BoringSSL or
! 113: libressl.
! 114:
! 115: - GnuTLS: `--without-ssl --with-gnutls`.
! 116: - wolfSSL: `--without-ssl --with-wolfssl`
! 117: - NSS: `--without-ssl --with-nss`
! 118: - mbedTLS: `--without-ssl --with-mbedtls`
! 119: - schannel: `--without-ssl --with-schannel`
! 120: - secure transport: `--without-ssl --with-secure-transport`
! 121: - MesaLink: `--without-ssl --with-mesalink`
! 122: - BearSSL: `--without-ssl --with-bearssl`
! 123:
! 124: # Windows
! 125:
! 126: ## Building Windows DLLs and C run-time (CRT) linkage issues
! 127:
! 128: As a general rule, building a DLL with static CRT linkage is highly
! 129: discouraged, and intermixing CRTs in the same app is something to avoid at
! 130: any cost.
! 131:
! 132: Reading and comprehending Microsoft Knowledge Base articles KB94248 and
! 133: KB140584 is a must for any Windows developer. Especially important is full
! 134: understanding if you are not going to follow the advice given above.
! 135:
! 136: - [How To Use the C Run-Time](https://support.microsoft.com/help/94248/how-to-use-the-c-run-time)
! 137: - [Run-Time Library Compiler Options](https://docs.microsoft.com/cpp/build/reference/md-mt-ld-use-run-time-library)
! 138: - [Potential Errors Passing CRT Objects Across DLL Boundaries](https://docs.microsoft.com/cpp/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries)
! 139:
! 140: If your app is misbehaving in some strange way, or it is suffering from
! 141: memory corruption, before asking for further help, please try first to
! 142: rebuild every single library your app uses as well as your app using the
! 143: debug multithreaded dynamic C runtime.
! 144:
! 145: If you get linkage errors read section 5.7 of the FAQ document.
! 146:
! 147: ## MingW32
! 148:
! 149: Make sure that MinGW32's bin dir is in the search path, for example:
! 150:
! 151: set PATH=c:\mingw32\bin;%PATH%
! 152:
! 153: then run `mingw32-make mingw32` in the root dir. There are other
! 154: make targets available to build libcurl with more features, use:
! 155:
! 156: - `mingw32-make mingw32-zlib` to build with Zlib support;
! 157: - `mingw32-make mingw32-ssl-zlib` to build with SSL and Zlib enabled;
! 158: - `mingw32-make mingw32-ssh2-ssl-zlib` to build with SSH2, SSL, Zlib;
! 159: - `mingw32-make mingw32-ssh2-ssl-sspi-zlib` to build with SSH2, SSL, Zlib
! 160: and SSPI support.
! 161:
! 162: If you have any problems linking libraries or finding header files, be sure
! 163: to verify that the provided `Makefile.m32` files use the proper paths, and
! 164: adjust as necessary. It is also possible to override these paths with
! 165: environment variables, for example:
! 166:
! 167: set ZLIB_PATH=c:\zlib-1.2.8
! 168: set OPENSSL_PATH=c:\openssl-1.0.2c
! 169: set LIBSSH2_PATH=c:\libssh2-1.6.0
! 170:
! 171: It is also possible to build with other LDAP SDKs than MS LDAP; currently
! 172: it is possible to build with native Win32 OpenLDAP, or with the Novell CLDAP
! 173: SDK. If you want to use these you need to set these vars:
! 174:
! 175: set LDAP_SDK=c:\openldap
! 176: set USE_LDAP_OPENLDAP=1
! 177:
! 178: or for using the Novell SDK:
! 179:
! 180: set USE_LDAP_NOVELL=1
! 181:
! 182: If you want to enable LDAPS support then set LDAPS=1.
! 183:
! 184: ## Cygwin
! 185:
! 186: Almost identical to the unix installation. Run the configure script in the
! 187: curl source tree root with `sh configure`. Make sure you have the `sh`
! 188: executable in `/bin/` or you'll see the configure fail toward the end.
! 189:
! 190: Run `make`
! 191:
! 192: ## Disabling Specific Protocols in Windows builds
! 193:
! 194: The configure utility, unfortunately, is not available for the Windows
! 195: environment, therefore, you cannot use the various disable-protocol options of
! 196: the configure utility on this platform.
! 197:
! 198: You can use specific defines to disable specific protocols and features. See
! 199: [CURL-DISABLE.md](CURL-DISABLE-md) for the full list.
! 200:
! 201: If you want to set any of these defines you have the following options:
! 202:
! 203: - Modify `lib/config-win32.h`
! 204: - Modify `lib/curl_setup.h`
! 205: - Modify `winbuild/Makefile.vc`
! 206: - Modify the "Preprocessor Definitions" in the libcurl project
! 207:
! 208: Note: The pre-processor settings can be found using the Visual Studio IDE
! 209: under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
! 210: Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
! 211: versions.
! 212:
! 213: ## Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds
! 214:
! 215: In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is
! 216: necessary to make definition of preprocessor symbol `USE_LWIPSOCK` visible to
! 217: libcurl and curl compilation processes. To set this definition you have the
! 218: following alternatives:
! 219:
! 220: - Modify `lib/config-win32.h` and `src/config-win32.h`
! 221: - Modify `winbuild/Makefile.vc`
! 222: - Modify the "Preprocessor Definitions" in the libcurl project
! 223:
! 224: Note: The pre-processor settings can be found using the Visual Studio IDE
! 225: under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
! 226: Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
! 227: versions.
! 228:
! 229: Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, in
! 230: order to use it with your program it is mandatory that your program includes
! 231: lwIP header file `<lwip/opt.h>` (or another lwIP header that includes this)
! 232: before including any libcurl header. Your program does not need the
! 233: `USE_LWIPSOCK` preprocessor definition which is for libcurl internals only.
! 234:
! 235: Compilation has been verified with [lwIP
! 236: 1.4.0](https://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip) and
! 237: [contrib-1.4.0](https://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip).
! 238:
! 239: This BSD-style lwIP TCP/IP stack support must be considered experimental given
! 240: that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl
! 241: might yet need some additional adjustment, caveat emptor.
! 242:
! 243: ## Important static libcurl usage note
! 244:
! 245: When building an application that uses the static libcurl library on Windows,
! 246: you must add `-DCURL_STATICLIB` to your `CFLAGS`. Otherwise the linker will
! 247: look for dynamic import symbols.
! 248:
! 249: ## Legacy Windows and SSL
! 250:
! 251: Schannel (from Windows SSPI), is the native SSL library in Windows. However,
! 252: Schannel in Windows <= XP is unable to connect to servers that
! 253: no longer support the legacy handshakes and algorithms used by those
! 254: versions. If you will be using curl in one of those earlier versions of
! 255: Windows you should choose another SSL backend such as OpenSSL.
! 256:
! 257: # Apple iOS and macOS
! 258:
! 259: On modern Apple operating systems, curl can be built to use Apple's SSL/TLS
! 260: implementation, Secure Transport, instead of OpenSSL. To build with Secure
! 261: Transport for SSL/TLS, use the configure option `--with-darwinssl`. (It is not
! 262: necessary to use the option `--without-ssl`.) This feature requires iOS 5.0 or
! 263: later, or OS X 10.5 ("Leopard") or later.
! 264:
! 265: When Secure Transport is in use, the curl options `--cacert` and `--capath`
! 266: and their libcurl equivalents, will be ignored, because Secure Transport uses
! 267: the certificates stored in the Keychain to evaluate whether or not to trust
! 268: the server. This, of course, includes the root certificates that ship with the
! 269: OS. The `--cert` and `--engine` options, and their libcurl equivalents, are
! 270: currently unimplemented in curl with Secure Transport.
! 271:
! 272: For macOS users: In OS X 10.8 ("Mountain Lion"), Apple made a major overhaul
! 273: to the Secure Transport API that, among other things, added support for the
! 274: newer TLS 1.1 and 1.2 protocols. To get curl to support TLS 1.1 and 1.2, you
! 275: must build curl on Mountain Lion or later, or by using the equivalent SDK. If
! 276: you set the `MACOSX_DEPLOYMENT_TARGET` environmental variable to an earlier
! 277: version of macOS prior to building curl, then curl will use the new Secure
! 278: Transport API on Mountain Lion and later, and fall back on the older API when
! 279: the same curl binary is executed on older cats. For example, running these
! 280: commands in curl's directory in the shell will build the code such that it
! 281: will run on cats as old as OS X 10.6 ("Snow Leopard") (using bash):
! 282:
! 283: export MACOSX_DEPLOYMENT_TARGET="10.6"
! 284: ./configure --with-darwinssl
! 285: make
! 286:
! 287: # Android
! 288:
! 289: When building curl for Android it's recommended to use a Linux environment
! 290: since using curl's `configure` script is the easiest way to build curl
! 291: for Android. Before you can build curl for Android, you need to install the
! 292: Android NDK first. This can be done using the SDK Manager that is part of
! 293: Android Studio. Once you have installed the Android NDK, you need to figure out
! 294: where it has been installed and then set up some environment variables before
! 295: launching `configure`. On macOS, those variables could look like this to compile
! 296: for `aarch64` and API level 29:
! 297:
! 298: export NDK=~/Library/Android/sdk/ndk/20.1.5948944
! 299: export HOST_TAG=darwin-x86_64
! 300: export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
! 301: export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
! 302: export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
! 303: export CC=$TOOLCHAIN/bin/aarch64-linux-android29-clang
! 304: export CXX=$TOOLCHAIN/bin/aarch64-linux-android29-clang++
! 305: export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
! 306: export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
! 307: export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
! 308:
! 309: When building on Linux or targeting other API levels or architectures, you need
! 310: to adjust those variables accordingly. After that you can build curl like this:
! 311:
! 312: ./configure --host aarch64-linux-android --with-pic --disable-shared
! 313:
! 314: Note that this won't give you SSL/TLS support. If you need SSL/TLS, you have
! 315: to build curl against a SSL/TLS layer, e.g. OpenSSL, because it's impossible for
! 316: curl to access Android's native SSL/TLS layer. To build curl for Android using
! 317: OpenSSL, follow the OpenSSL build instructions and then install `libssl.a` and
! 318: `libcrypto.a` to `$TOOLCHAIN/sysroot/usr/lib` and copy `include/openssl` to
! 319: `$TOOLCHAIN/sysroot/usr/include`. Now you can build curl for Android using
! 320: OpenSSL like this:
! 321:
! 322: ./configure --host aarch64-linux-android --with-pic --disable-shared --with-ssl="$TOOLCHAIN/sysroot/usr"
! 323:
! 324: Note, however, that you must target at least Android M (API level 23) or `configure`
! 325: won't be able to detect OpenSSL since `stderr` (and the like) weren't defined
! 326: before Android M.
! 327:
! 328: # Cross compile
! 329:
! 330: Download and unpack the curl package.
! 331:
! 332: `cd` to the new directory. (e.g. `cd curl-7.12.3`)
! 333:
! 334: Set environment variables to point to the cross-compile toolchain and call
! 335: configure with any options you need. Be sure and specify the `--host` and
! 336: `--build` parameters at configuration time. The following script is an
! 337: example of cross-compiling for the IBM 405GP PowerPC processor using the
! 338: toolchain from MonteVista for Hardhat Linux.
! 339:
! 340: #! /bin/sh
! 341:
! 342: export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
! 343: export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
! 344: export AR=ppc_405-ar
! 345: export AS=ppc_405-as
! 346: export LD=ppc_405-ld
! 347: export RANLIB=ppc_405-ranlib
! 348: export CC=ppc_405-gcc
! 349: export NM=ppc_405-nm
! 350:
! 351: ./configure --target=powerpc-hardhat-linux
! 352: --host=powerpc-hardhat-linux
! 353: --build=i586-pc-linux-gnu
! 354: --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local
! 355: --exec-prefix=/usr/local
! 356:
! 357: You may also need to provide a parameter like `--with-random=/dev/urandom` to
! 358: configure as it cannot detect the presence of a random number generating
! 359: device for a target system. The `--prefix` parameter specifies where curl
! 360: will be installed. If `configure` completes successfully, do `make` and `make
! 361: install` as usual.
! 362:
! 363: In some cases, you may be able to simplify the above commands to as little as:
! 364:
! 365: ./configure --host=ARCH-OS
! 366:
! 367: # REDUCING SIZE
! 368:
! 369: There are a number of configure options that can be used to reduce the size of
! 370: libcurl for embedded applications where binary size is an important factor.
! 371: First, be sure to set the `CFLAGS` variable when configuring with any relevant
! 372: compiler optimization flags to reduce the size of the binary. For gcc, this
! 373: would mean at minimum the -Os option, and potentially the `-march=X`,
! 374: `-mdynamic-no-pic` and `-flto` options as well, e.g.
! 375:
! 376: ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...
! 377:
! 378: Note that newer compilers often produce smaller code than older versions
! 379: due to improved optimization.
! 380:
! 381: Be sure to specify as many `--disable-` and `--without-` flags on the
! 382: configure command-line as you can to disable all the libcurl features that you
! 383: know your application is not going to need. Besides specifying the
! 384: `--disable-PROTOCOL` flags for all the types of URLs your application will not
! 385: use, here are some other flags that can reduce the size of the library:
! 386:
! 387: - `--disable-ares` (disables support for the C-ARES DNS library)
! 388: - `--disable-cookies` (disables support for HTTP cookies)
! 389: - `--disable-crypto-auth` (disables HTTP cryptographic authentication)
! 390: - `--disable-ipv6` (disables support for IPv6)
! 391: - `--disable-manual` (disables support for the built-in documentation)
! 392: - `--disable-proxy` (disables support for HTTP and SOCKS proxies)
! 393: - `--disable-unix-sockets` (disables support for UNIX sockets)
! 394: - `--disable-verbose` (eliminates debugging strings and error code strings)
! 395: - `--disable-versioned-symbols` (disables support for versioned symbols)
! 396: - `--enable-hidden-symbols` (eliminates unneeded symbols in the shared library)
! 397: - `--without-libidn` (disables support for the libidn DNS library)
! 398: - `--without-librtmp` (disables support for RTMP)
! 399: - `--without-ssl` (disables support for SSL/TLS)
! 400: - `--without-zlib` (disables support for on-the-fly decompression)
! 401:
! 402: The GNU compiler and linker have a number of options that can reduce the
! 403: size of the libcurl dynamic libraries on some platforms even further.
! 404: Specify them by providing appropriate `CFLAGS` and `LDFLAGS` variables on
! 405: the configure command-line, e.g.
! 406:
! 407: CFLAGS="-Os -ffunction-sections -fdata-sections
! 408: -fno-unwind-tables -fno-asynchronous-unwind-tables -flto"
! 409: LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
! 410:
! 411: Be sure also to strip debugging symbols from your binaries after compiling
! 412: using 'strip' (or the appropriate variant if cross-compiling). If space is
! 413: really tight, you may be able to remove some unneeded sections of the shared
! 414: library using the -R option to objcopy (e.g. the .comment section).
! 415:
! 416: Using these techniques it is possible to create a basic HTTP-only shared
! 417: libcurl library for i386 Linux platforms that is only 113 KiB in size, and an
! 418: FTP-only library that is 113 KiB in size (as of libcurl version 7.50.3, using
! 419: gcc 5.4.0).
! 420:
! 421: You may find that statically linking libcurl to your application will result
! 422: in a lower total size than dynamically linking.
! 423:
! 424: Note that the curl test harness can detect the use of some, but not all, of
! 425: the `--disable` statements suggested above. Use will cause tests relying on
! 426: those features to fail. The test harness can be manually forced to skip the
! 427: relevant tests by specifying certain key words on the `runtests.pl` command
! 428: line. Following is a list of appropriate key words:
! 429:
! 430: - `--disable-cookies` !cookies
! 431: - `--disable-manual` !--manual
! 432: - `--disable-proxy` !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
! 433:
! 434: # PORTS
! 435:
! 436: This is a probably incomplete list of known hardware and operating systems
! 437: that curl has been compiled for. If you know a system curl compiles and
! 438: runs on, that isn't listed, please let us know!
! 439:
! 440: - Alpha DEC OSF 4
! 441: - Alpha Digital UNIX v3.2
! 442: - Alpha FreeBSD 4.1, 4.5
! 443: - Alpha Linux 2.2, 2.4
! 444: - Alpha NetBSD 1.5.2
! 445: - Alpha OpenBSD 3.0
! 446: - Alpha OpenVMS V7.1-1H2
! 447: - Alpha Tru64 v5.0 5.1
! 448: - AVR32 Linux
! 449: - ARM Android 1.5, 2.1, 2.3, 3.2, 4.x
! 450: - ARM INTEGRITY
! 451: - ARM iOS
! 452: - Cell Linux
! 453: - Cell Cell OS
! 454: - HP-PA HP-UX 9.X 10.X 11.X
! 455: - HP-PA Linux
! 456: - HP3000 MPE/iX
! 457: - MicroBlaze uClinux
! 458: - MIPS IRIX 6.2, 6.5
! 459: - MIPS Linux
! 460: - OS/400
! 461: - Pocket PC/Win CE 3.0
! 462: - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
! 463: - PowerPC Darwin 1.0
! 464: - PowerPC INTEGRITY
! 465: - PowerPC Linux
! 466: - PowerPC Mac OS 9
! 467: - PowerPC Mac OS X
! 468: - SH4 Linux 2.6.X
! 469: - SH4 OS21
! 470: - SINIX-Z v5
! 471: - Sparc Linux
! 472: - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
! 473: - Sparc SunOS 4.1.X
! 474: - StrongARM (and other ARM) RISC OS 3.1, 4.02
! 475: - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
! 476: - StrongARM NetBSD 1.4.1
! 477: - Symbian OS (P.I.P.S.) 9.x
! 478: - TPF
! 479: - Ultrix 4.3a
! 480: - UNICOS 9.0
! 481: - i386 BeOS
! 482: - i386 DOS
! 483: - i386 eCos 1.3.1
! 484: - i386 Esix 4.1
! 485: - i386 FreeBSD
! 486: - i386 HURD
! 487: - i386 Haiku OS
! 488: - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
! 489: - i386 Mac OS X
! 490: - i386 MINIX 3.1
! 491: - i386 NetBSD
! 492: - i386 Novell NetWare
! 493: - i386 OS/2
! 494: - i386 OpenBSD
! 495: - i386 QNX 6
! 496: - i386 SCO unix
! 497: - i386 Solaris 2.7
! 498: - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
! 499: - i486 ncr-sysv4.3.03 (NCR MP-RAS)
! 500: - ia64 Linux 2.3.99
! 501: - m68k AmigaOS 3
! 502: - m68k Linux
! 503: - m68k uClinux
! 504: - m68k OpenBSD
! 505: - m88k dg-dgux5.4R3.00
! 506: - s390 Linux
! 507: - x86_64 Linux
! 508: - XScale/PXA250 Linux 2.4
! 509: - Nios II uClinux
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>