[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MirageOS-devel] mirageos 3.0 : let's break some APIs

On 18 May 2016 at 17:28, Mindy <mindy@xxxxxxxxxxxxxxxxxxx> wrote:
> Hi folks!
> With some exciting new developments (OCaml 4.03 with flambda, `result`,
> `logs`) and users, it's probably time to think about the broad world of
> possibilities unlocked by big changes to mirage-types. Here are some things
> that recently have been mentioned:
> * rename the `V1` and `V1_LWT` modules to something unversioned, like `S` or
> * replace or augment the `error` types with Result.result
> * break up `mirage-types` into a package per module type, so module types
> can be independently changed and released
> * changes to the semantics of functions in low-level module type definitions
> like `FS` and `NETWORK`
> I'm surely missing many things folks would want to incorporate in a big
> API-breaking release -- please do let us know what they are. :)
> Also, if you have any long-standing PRs or issues that are blocked because
> you don't want to do a big API-breaking change, links to them would be
> appreciated.

I'd very much like to make it easier to do API changes without having
to update everything at once. These issues are probably related to

https://github.com/mirage/mirage/pull/383 (Add `pp_error` to FLOW and
use a result type, from 2015)
https://github.com/mirage/mirage/pull/286 (Support checksum offload, from 2014)

Looking at the git logs for mirage-types, in the last 12 months we
only made one change to an existing module type, which was to remove

  val input_arpv4: t -> buffer -> unit io
  (** {b FIXME} *)

from IPV4. I guess this API had only one user (tcpip, which provides
both IP and ARP implementations).

This could mean that our APIs are nearly perfect and we can't think of
any improvements. But it could also mean that updating them is too
hard. The more implementations of an interface we have (e.g. Unix,
Xen, Solo5, JavaScript, etc) the harder it becomes to get them all
updated and released together.

If we could include multiple versions of an API in mirage-types, we
could release things in stages. e.g.

1. Add MIRAGE.NET.V2 to mirage-types.
2. Release mirage-net-xen, mirage-net-unix, mirage-net-... providing
V1 and V2 implementations.
3. Release tcpip with support for V2.
4. Update the mirage tool to use V2 to connect tcpip to net.

Note that providing both versions of an interface is typically very
easy. In this case, V1.write would call V2.write with the default
flags, and V1.listen would wrap the callback argument with one that
discarded the flags.

Dr Thomas Leonard        http://roscidus.com/blog/
GPG: DA98 25AE CAD0 8975 7CDA  BD8E 0713 3F96 CA74 D8BA

MirageOS-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.