A little late to the party, but:

Given the goals are to give an easy way to create a pool that is compatible 
with a desired range of other systems (and tools like GRUB) in a way that is 
both interoperable between the different distributions / platforms, easy to 
automate and simple to remember...

I propose something similar to how legacy pools version<5000 / SPA_VERSION 
worked, just that there won't be one vendor that bumps the version with each 
new feature implemented but OpenZFS maintaining that list and only adding a new 
entry (and increasing the maximum supported 'feature_level' over all of 
OpenZFS, just to tack a name onto it for the moment) when availability of a new 
feature is archieved on _all_ platforms.

This would IMHO simplify feature interoperation quite drastically, as any 
system (regardless of platform, distribution, ...) at a certain feature_level 
would guarantee availability of a defined feature set. And a maximum number to 
support all system one supports is way easier to remember for most than a list 
of feature names - and way quicker and less error prone to type.

Bonus points for sorting all existing features already supported on every 
platform in a way that the first ones (with the lowest numbers) are the ones 
all zfs aware bootloaders on all zfs platforms support (resulting in something 
like feature_level=5 being compatible with grub and, in an ideal world, 
whatever exists on BSD, macOS and Illumos to boot from a zfs pool).

Adding a platform agnostic way to query the maximum supported feature_level of 
a system, which could well be a simple /etc/zfs/feature_level file (just 
containing the numeric level) that gets installed with supporting ZFS versions 
(and can easily be echo'd into older installs to make them compatible). Then 
one (or a script) could quickly look at multiple systems, just memorize the 
lowest seen number and end up with the maximum feature_level a pool can have to 
support all these systems.

OpenZFS could provide a quite trivial helper script that converts a 
feature_level to a string of "-o feature@<name>=enabled" (that could be 
directly used in "zpool create `zfs-feature-level 9` ...") which would be easy 
to install on older systems (and in more modern versions be called into from 
eg. "zpool create --feature-level=9").

Second operation of that helper could be (when not given a one-argument 
integer) to return the minimal feature_level for a set of specified features 
("zfs-feature-level <feature name> ..." => "9"). This could also be used to 
handle any 'portable', 'compatX', 'release-YYYY-MM', 'distribution-x-version-y' 
(or whatever people might see the need for) tags - and as it idealy would be a 
script (bash, or something that's available on all systems) it would be easy to 
tweak to add support custom user specific tags ('crap-machine-in-cellar').
------------------------------------------
openzfs: openzfs-developer
Permalink: 
https://openzfs.topicbox.com/groups/developer/T562a2f6ecf883736-M6f447236d7f119901d644891
Delivery options: https://openzfs.topicbox.com/groups/developer/subscription

Reply via email to