9P Implementations
This is a list of existing client and server implementations of the various variants of the 9P protocol.
| Name | Version | Client Server | Lang | Operating System(s) | License | Comments |
|---|---|---|---|---|---|---|
| Plan 9 from Bell Labs | 9p2000 | Client/Server | C | Plan 9, Plan B | LPL | The original and 'reference' implementation as part of the Plan 9 operating system. |
| plan9port | 9p2000, 9p2000.u | Client/Server | C | Most Unix variants | LPL/MIT | Plan 9 from User Space(aka plan9port) is a port of many user space utilities and libraries from Plan 9 to Unix systems. |
| Inferno | 9p2000 | Client/Server | Limbo | All Inferno host systems | GPL/BSD | Part of the Inferno operating system, can run hosted on top of other systems. |
| v9fs | 9p2000, 9p2000.u | Client | C | Linux | GPL | File system driver for the Linux kernel. |
| py9p | 9p2000 | Client/Server | Python | - | Public Domain | 9P implementation in pure python. |
| libixp | 9p2000 | Client/Server | C | All Unix variants | MIT | Originally as part of the wmii project. |
| Ruby-IXP | 9p2000 | Client/Server(?) | Ruby | - | GPL | A simple and fast client implementation in pure Ruby. |
| Rstyx | 9p2000 | Client/Server(?) | Ruby | - | LGPL/Ruby License | Another pure Ruby implementation. |
| Jstyx | 9p2000 | Client/Server | Java | - | BSD License | A 9P implementation in pure Java, also includes special libraries for grid services. |
| ninep | 9p2000 | Client | Lisp | - | MIT | A multi-threaded client implementation in Lisp. |
| 9pvfs.tcl | 9p2000 | Client/Server | TCL | - | Public Domain? | Transparent access to 9P server from TCL. |
| 9pc | 9p2000 | Client/Server | C# | - | Public Domain? | 9P for .NET environments. |
| rii | 9p2000 | Client | C/Ruby | - | MIT? | Ruby bindings to the libixp library. |
| ocaml-9p | 9p2000 | Client | Ocaml | - | BSD | OCaml-9P is a pure OCaml implementation. |
| styx-n-9p | 9p2000 | Client | Java | - | MIT | Client only multi-threaded Java implementation including Inferno authentication support. |
| r9p | 9p2000 | Client | Ruby | - | MIT | A simple client implementation for Ruby. It supports the operations of the IO class by providing a true file descriptor through a proxy thread. |
| 9puffs | 9p2000 | Client | C | NetBSD | BSD | Userspace file system driver implemented on top of puffs. |
| 9p.scm | 9p2000 | Client | Scheme | - | MIT? | A simple client implementation in Scheme using gauche's networking, by Neale Pickett. |
| PHP9P | 9p2000 | Client/Server | PHP/C | - | MIT | PHP bindings for libixp. |
| JS9P | 9p2000 | Client/Server | JavaScript | - | MIT | A javascript 9p library. |
| Net_9P | 9p2000 | Client/Server | PHP | - | LGPL v2 | A pure PHP implementation of 9P, to be included in PEAR. |
| JavaScript Styx | 9p2000 | Client/Server | JavaScript | - | LGPL v2 | JavaScript 9p implementation for FireFox (to be ported to other browsers in the future). | Chicken Scheme 9p | 9p2000 | Client/Server | Chicken Scheme | - | BSD | A pure Scheme implementation of the 9p networked filesystem protocol. |
| Duat | 9p2000, 9p2000.u | Client/Server | C | - | BSD | An I/O library for C applications. It may be used to implement FS-ish servers; primarily via the 9p2000(.u) protocol. |
| NPFS/SPFS | 9p2000, 9p2000.u | Server | C | - | BSD-like | A multi-threaded replacement of u9fs -- npfs also functions as a framework which can be easily reused to build synthetic file systems. |
| Lib-IXP | 9p2000 | Client | C/Perl | - | MIT? | Perl bindings to the [libixp library](http://repo.cat-v.org/libixp/). |
| J9P/StyxLib | 9p2000 | Client/Server | Java | - | LGPL | A pure Java implementation designed to ease the integration of legacy and non-9P services into 9P networks. Includes p9sk1, p9sk2 and Inferno message digest and encryption. |
| Go9p | 9p2000 | Client/Server | Go | - | BSD License | A 9P library in the Go programming language, by Andrey Mirtchovski and Latchesar Ionkov. |
| Go9p | 9p2000 | Client/Server | Go | - | BSD License | Ron Minnich's version of Go9p. |
| 9ph (Hackage: NineP) | 9p2000 | Client/Server | Haskell | - | BSD License | Implementation in pure Haskell, by Tim Newsham and Dave Leimbach(aka leimy2k). |
| diod | 9p2000.L | Server | C | - | GPL v2 | User space server that only supports 9p2000.L (as implemented by v9fs in Linux kernels>2.6.38). |
| NinePea | 9p2000 | Client/Server | C, C++ | - | MIT/X Consortium License | 9P library and example for arduino mega 1280. |
| Arm-js | 9p2000 | Client/Server | Javascript | - | - | ARM emulator written in Javascript. It contains a 9P implementation used to communicate with the browser and store files. |
| jor1k | 9p2000 | Client/Server | Javascript | - | Simplified BSD | OpenRISC 1000 emulator written in Javascript. It also contains a 9P implementation used to communicate with the browser and store files. |
| v86 | 9p2000 | Client/Server | Javascript | - | BSD | X86 emulator written in Javascript. As you may have guessed, it contains a 9P implementation used to communicate with the browser and store files. |
| 9pfs | 9p2000 | Client | C | - | BSD | Mounts a 9P service using the FUSE file system driver. It is a replacement for 9pfuse from plan9port. Unlike 9pfuse, it works equally well on Linux, OpenBSD, FreeBSD, and any other OS with a FUSE implementation. |
| lua9p | 9p2000 | Client | Lua | - | BSD | Barebones 9p client library. written in Lua. |
| c9 | 9p2000 | Client/Server | C | - | - | 9p client/server library for highly constrained environments. |
| ninep | 9p2000 | Client/Server | Go | BSD | - | Package for implementing clients and servers of the 9P and 9P2000 distributed resource protocols in Go. |
| libninep | 9p2000 | Server | C | - | - | GSoC project by yiyus. |
| go-p9p | 9p2000 | Client/Server | Go | - | - | A modern, performant 9P library for Go. |
| libstyxe | 9p2000.e | Client/Server | C++ | - | Apache 2 | Message parser and builder, no networking. |
| NinePMonad | 9p2000 | Server | Haskell | - | LGPL 3.0 | Library for writing 9p servers in Haskell. |
| ZeroFS | 9p2000 | Server | Rust | - | AGPL v3 | Filesystem for any S3-compatible storage. |
Implementations in progress for: lua and others. But don’t let that deter you from writing your own! Contact me if you know of any others.