interledger / interledger-rs

An easy-to-use, high-performance Interledger implementation written in Rust
http://interledger.rs
Other
198 stars 70 forks source link

Towards a v1.0 #557

Open emschwartz opened 4 years ago

emschwartz commented 4 years ago

What would it take for us to release a v1.0 of the different Interledger.rs components?

Here are some of the things I would put on the list:

ilp-node

Services

What else? cc @gakonst @dora-gt @bstrie

bstrie commented 4 years ago

Stable HTTP API

Any thoughts on "future proofing" the API by prefixing all paths with "v1/" or something?

Stable protocol implementations (SPSP, STREAM, CCP, BTP, etc)

Are the specifications of these protocols themselves stable?

bstrie commented 4 years ago

One thing to consider is that I would like to audit the public interfaces of each crate in order to make sure there's no hidden, forgotten things that we'd be accidentally stabilizing.

Regarding documentation, I would like all public items to have documentation comments (and ideally doctests).

I'd recommend starting this process at the very bottom of the crate hierarchy, with interledger-packet, and stabilizing each crate only after its own interledger-* dependencies reach stability.

emschwartz commented 4 years ago

Any thoughts on "future proofing" the API by prefixing all paths with "v1/" or something?

Not necessary because you can always put a v2 and put the next version under there :wink:

Are the specifications of these protocols themselves stable?

Most, yes. The only one that hasn't been finished and merged is CCP (though https://github.com/interledger/rfcs/pull/455 is pretty close).

Regarding documentation, I would like all public items to have documentation comments (and ideally doctests).

Agreed. I think there's a way to have the compiler require that too.

I'd recommend starting this process at the very bottom of the crate hierarchy, with interledger-packet, and stabilizing each crate only after its own interledger-* dependencies reach stability.

Not a bad idea. FWIW, ilp-packet already pretty stable. The core service trait is the next one to figure out, but that requires a bunch of breaking changes to switch to async/await if not also to tower.

bstrie commented 4 years ago

Re: "crate hierarchy", here's what our current interledger-only dependency graph looks like:

Screenshot_2019-12-06 Webgraphviz

Suggesting the following hierarchy:

  1. packet
  2. service
  3. btp, ccp, router, ildcp, http
  4. stream, settlement
  5. spsp, service-util
  6. api
  7. store
  8. interledger

Although auditing the features exposed by each crate could shake this up a bit; here I'm specifically thinking of service-util, where only about half of the services it exposes actually wind up using the settlement crate (and therefore the http crate transitively). Given that it remains an open question as to what to do with the service-util crate, this could suggest one potential division.

An additional thing to consider is the question of whether crates ought to re-export their dependencies, in order to prevent downstream consumers from needing to explicitly depend upon those crates as well. In particular there is no crate here that imports interledger-service that does not also import interledger-packet; should interledger-service re-export the public API from interledger-packet?

gakonst commented 4 years ago

For completeness, I'm opening issues similar to #561 for the above crates.

We should also discuss on a per-crate basis the upgrade plan to the new futures, if we're going to be using any compatibility helper crates etc.

Should we also add per-argument docs? https://github.com/rust-lang/rust/issues/57525

Any functions which are public in a crate but are not exported at the lib.rs should be changed to pub(crate) or less

gakonst commented 4 years ago

Update on this:

@interledger-rs/contributors thoughts? I really want to get this prioritized properly and not have us bikeshed on things of marginal value.

kincaidoneil commented 4 years ago

I think this needs to be added to the pre-1.0 TODOs: Enforce minimum exchange rates (#273). We can't have all payments vulnerable to be stolen by intermediaries. I'd be open to implementing that unless someone else was?

I also think we should consider implementing #120, but that's also possible to do backwards compatibly so it's not a huge deal if we don't.

gakonst commented 4 years ago

@kincaidoneil Yeah if you want please go ahead and tackle #273, don't think anyone's on it. I have been saying that we should not worry too much about backwards compatibility due to low usage of the software, maybe @sappenin has some input here. You could implement #120 (pretty easy PR) and just add a 'BREAKING' commit message, so that it shows in the auto-generated changelogs.

gakonst commented 4 years ago

Now that all of our desired features are done, we should make a 1.0 release imo.

bstrie commented 4 years ago

What's the release process, and who has the credentials?

koivunej commented 3 years ago

The 1.0 discussion was rekindled after I realized there never was a 1.0 release, which is good, giving us room to make breaking changes, currently tracked in #668.