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

[MirageOS-devel] Versioning

All; This came up and after some discussion was then deferred in the
call today. I think it's worth thinking about this a bit before we hit
the next round of omg-we're-about-to-release panic :)

There are currently several things that a "version of Mirage" might refer to:

1. `mirage --version`, ie., the version reported by the CLI tool which
is (now) tied to the version of the `mirage` package in OPAM. This
appears to be, de facto, what users think of as the "version of
Mirage". Currently 2.6.1 as of Dave's latest merge I believe.

2. The set of package constraints output by `opam info mirage`, ie.,
the package versions that the code auto-generated by the CLI tool
requires. This is intimately tied to 1 as it changes when packages
changes requiring the code autogenerated by the CLI tool needs to
change. But it's currently not quite identical to 1, as OPAM metadata
for a package may be (and has been?) updated without revving the
package version.

3. The `1` in `V1_LWT` in `mirage-types`.

4. The version number that we announce when we claim a release. I
believe the next one is due to be "v3".

5. (Coming Soon!) The version of `functoria`, per @drup, the backend
for code generation which will soon be separate from the specific
combinators implemented in the CLI tool itself.

I think this situation is confusing, and I think it is only going to
get more confusing as time passes unless we make some conscious
decisions about what a "version of Mirage" means. In particular,
changes to 1/3/5 may require users' `config.ml` files to change; and
changes to 2 may require their unikernel code to change. 4 is a
publicity thing as far as I can tell and, to a large extent,
dissociated from the others.

For a specific case where this might matter, per the call today, it
seems that there will be some (minor) breakage of users' `config.ml`
syntax when the functoria PR is merged into `mirage`. The two main
proposals seemed to be:

+ we update the CLI tool to 3.0.0 as that will clearly signal to users
that their `config.ml` may be broken; or
+ we update the CLI tool to 2.7.0 as we're not ready to release
"Mirage v3" (ie., an increment of 4 in the list above).

(Either way we update the "breaking changes" page on the website.)

On reflection my own strawman would be that we tie 1,2,4 together by
revving the major version on an "announced release", revving the minor
version every time the CLI tool changes, and revving the point release
when the package constraints change; we deal with 5 by making it just
a pacakge constraint a la 2, and we simply stick with "V1_LWT" for now
just in case we ever want to support more than one set of types.

At this point I'm throwing the floor open. Does anyone have any views
/ opinions on this?  Think it's not a problem?  Got proposals for
solutions?  etc...

Richard Mortier

MirageOS-devel mailing list



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