I am planning to publish Rust bindings for igraph and want to ensure that I do it in accord with the wishes of the igraph developers. My main question here concerns the naming and licensing of the library, but please do tell me if something occurs to you that I should probably be aware of. Below I’ll give a small amount of background info and the intended scope, then I’ll pose my questions.
I’ve been looking for a Rust pet project for a while. Recently, I needed some tools for working with graphs and found those tools missing in the Rust ecosystem, so I figured that providing those tools would be a good project for me. Thus, I went looking for existing libraries that I could interface with from Rust. I found graph-tool, networkit and igraph—since igraph is written in C, interfacing with Rust is pretty straightforward. And here I am.
My intention is to provide two crates, following the structure described in https://kornel.ski/rust-sys-crate. The first crate will be a low level interface to the igraph C library, consisting basically of a build script which
- Builds igraph from bundled source code using the cc crate
- auto-generates unsafe bindings to igraph using the bindgen crate
The second crate will provide users with a Rust-idiomatic interface to igraph, built on top of the first crate.
Developing the second crate is expected to require by far the most amount of work. Initially I will focus on supporting the basic interface along with features related to determining structural properties of graphs. There’s a definite risk (in fact I would say it is expected) that I will never support all features. I will be doing this on my own time, at my own pace.
And so we come to my questions:
- Concerning licensing, it is my understanding that I need to verbatim include https://github.com/igraph/igraph/blob/master/COPYING somewhere visible in the source code, which amounts to licensing the two crates according to GPLv2 (or, at the user’s option, any later version). Could someone verify that I understood this correctly?
- Concerning the naming of the crates, I imagine rust-igraph-sys for the low level crate and rust-igraph for the high level crate would be good names. However, if the igraph developers ever intend to support their own Rust bindings for igraph, I image you might want to use that name yourselves—hence I’d like a pointer as to whether or not rust-igraph is an agreeable name for a crate like what I have in mind.
- Did I miss something? Anything I should be aware of?