correct/working 9p2000 library in Go?

338 views
Skip to first unread message

Jason E. Aten

unread,
Feb 19, 2017, 12:39:18 PM2/19/17
to golang-nuts
I'd like to play with the 9p protocol (plan9's "everything is a filesystem" IPC protocol; I guess the updated 9p2000 version is the one everyone actually uses) ...

...but the implementations I can find in Go seem half-done/incomplete/unmaintained. 

http://9p.cat-v.org/implementations  + other searches turned up:


0) https://github.com/9fans/go - Last commit 2 years ago. 2 outstanding issues, 8 outstanding pull requests. Appears orphaned.

1) https://code.google.com/p/go9p/ seems to be superceeded by
https://github.com/lionkov/go9p - 6 open issues including race conditions that appear quite serious.

2) https://github.com/rminnich/go9p/  - last commit in 2015, 3 outstanding issues, 7 outstanding pull requests

3) https://github.com/Harvey-OS/ninep - recent activity as of 11 days ago (yay), but an open issue indicates ongoing data races and experimentation with the implementation that indicates it is likely not stable or usable by 3rd parties.

4) https://github.com/docker/go-p9p - six open issues, some of them serious and indicating that it cannot interoperate with other 9p implementations

5) https://github.com/joushou/qp  - very little documentation and its build is failing

So to my question...

Does anyone know of, or have a pointer to, a working/solid/correct 9p (9p2000) client/server library in Go?


Perhaps the authors of the above could chime in and clarify if their package *is* actually in good shape, despite appearances.


NB the problematic licensing of any code derived from the original C implementation means I'll need to locate a non-Lucent  license in order to use a lib. So this rules out a straight port of the C.

Thanks!

-J

Dave MacFarlane

unread,
Feb 19, 2017, 1:25:50 PM2/19/17
to Jason E. Aten, golang-nuts
On Sun, Feb 19, 2017 at 5:39 PM, Jason E. Aten <j.e....@gmail.com> wrote:
> I'd like to play with the 9p protocol (plan9's "everything is a filesystem"
> IPC protocol; I guess the updated 9p2000 version is the one everyone
> actually uses) ...
>
> ...but the implementations I can find in Go seem
> half-done/incomplete/unmaintained.
>
> http://9p.cat-v.org/implementations + other searches turned up:
>
>
> 0) https://github.com/9fans/go - Last commit 2 years ago. 2 outstanding
> issues, 8 outstanding pull requests. Appears orphaned.
>

There are more packages that are part of 9fans.net/go than things for
dealing with 9p, so it's possible that none of the outstanding issues
will affect whatever it is you're trying to do.

> 1) https://code.google.com/p/go9p/ seems to be superceeded by
> https://github.com/lionkov/go9p - 6 open issues including race conditions
> that appear quite serious.
>

I don't know anything about this one.

> 2) https://github.com/rminnich/go9p/ - last commit in 2015, 3 outstanding
> issues, 7 outstanding pull requests
>
> 3) https://github.com/Harvey-OS/ninep - recent activity as of 11 days ago
> (yay), but an open issue indicates ongoing data races and experimentation
> with the implementation that indicates it is likely not stable or usable by
> 3rd parties.
>

ron minnich is also behind Harvey-OS (with others), so I'd guess that
2) is superceded by 3).

> 4) https://github.com/docker/go-p9phttps://github.com/docker/go-p9p - six open issues, some of them serious
> and indicating that it cannot interoperate with other 9p implementations
>
> 5) https://github.com/joushou/qp - very little documentation and its build
> is failing
>

I don't know anything about these either.

> So to my question...
>
> Does anyone know of, or have a pointer to, a working/solid/correct 9p
> (9p2000) client/server library in Go?
>
>
> Perhaps the authors of the above could chime in and clarify if their package
> *is* actually in good shape, despite appearances.
>
>
> NB the problematic licensing of any code derived from the original C
> implementation means I'll need to locate a non-Lucent license in order to
> use a lib. So this rules out a straight port of the C.
>

The original Plan 9 code was eventually released under the GPL.
There's a mirror of the GPLed code at
https://github.com/0intro/plan9-gpl.

Note that the "original C implementation" is in the Plan 9 C dialect,
not ANSI C.. but Plan 9 C is closer to Go than ANSI C is, so if you're
looking to port the original to Go and you'd be comfortable doing it
with ANSI C, you should be fine.

You might also want to look into intro(5) either in the above repo, or
an online copy of the man pages for any of the many Plan 9 forks.
Section 5 of the man pages define the 9p protocol.
--
- Dave

Jason E. Aten

unread,
Feb 22, 2017, 5:40:53 PM2/22/17
to Latchesar Ionkov, golang-nuts
Thanks Latchesar. Mr. Minnich notes here
that, with regards to his fork:

> I've been using it for quite some time now and it's been very solid and stable.

On Wed, Feb 22, 2017 at 4:30 PM, Latchesar Ionkov <lu...@ionkov.net> wrote:
I guess you assume that we are actually checking if there are issues
open and closing them when the bugs get fixed. That's definitely not
true for my repositories and I am not planning to spend time on this.

https://github.com/lionkov/go9p was superseded by
https://github.com/lionkov/ninep (I was told that some people dislike
packages that start with go). I don't know of any bugs in it, if there
are some, I'd be happy to fix them (but not close the issues :)

I believe Ron's HarveyOS/ninep is a clone of mine repository.
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an

Latchesar Ionkov

unread,
Feb 22, 2017, 7:11:33 PM2/22/17
to Jason E. Aten, golang-nuts
I guess you assume that we are actually checking if there are issues
open and closing them when the bugs get fixed. That's definitely not
true for my repositories and I am not planning to spend time on this.

https://github.com/lionkov/go9p was superseded by
https://github.com/lionkov/ninep (I was told that some people dislike
packages that start with go). I don't know of any bugs in it, if there
are some, I'd be happy to fix them (but not close the issues :)

I believe Ron's HarveyOS/ninep is a clone of mine repository.

On Sun, Feb 19, 2017 at 10:39 AM, Jason E. Aten <j.e....@gmail.com> wrote:
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts...@googlegroups.com.

Kare Nuorteva

unread,
Feb 23, 2017, 11:05:51 AM2/23/17
to golang-nuts

Here's one that I found just recently: https://blog.aqwari.net/9P/

Cheers,
Kare

David Arroyo

unread,
Feb 24, 2017, 2:20:21 AM2/24/17
to golan...@googlegroups.com
I'm the author of this one[1], and I hate to contribute to the OP's initial complaint, but it is not complete. I plan to make it as easy to use as net/http, but I can only find so much time to work on it. I've also fixed a number of bugs that arose from my misunderstanding of the protocol, so it would only be compliant by luck right now. I did use it to write a toy server[2], so it's functional,  but definitely a moving target.

Regards,
David

Ilya Kostarev

unread,
Feb 24, 2017, 6:12:22 AM2/24/17
to golan...@googlegroups.com
Hi, David
thanks for the code,
slightly offtopic, seems you heavily use Acme which can explore 9p file
system directly without mounting, but I forget the syntax on plan9port
and can't find appropriate documentation. Can you kindly give me a hint.
Cheers
__
Ilya
Reply all
Reply to author
Forward
0 new messages