On Thu, Sep 24, 2020 at 06:43:56PM -0400, Matt Coleman wrote: > >> For example, the Windows Server 2016 Hyper-V version is 10.0.14393.0, > >> so its “micro” is over 14 times larger than the encoding allows. > >> > >> My current workaround is to truncate it to something that works (E.G. > >> 10.0.143), but that's clearly less than ideal. > > The problem here is the virConnectGetVersion public API - we cannot > > alter its signature. > I hadn’t realized this was exposed by the public API. > > Since the API can’t change, should I update my code to only output > major.minor instead of truncating micro to an incorrect/misleading > value? > > The downside of this is that Microsoft has referred to Windows 10 as > “the last version of Windows” and Hyper-V versions are the same as the > OS’s kernel version. So, this would result in libvirt’s Hyper-V driver > reporting version 10.0 until Microsoft reconsiders that approach. Our current encoding scheme allows 1000 for each part of the version number. Realistically the major and minor version numbers are unlikely to exceed 99 respectively. IOW we could stuff both the hyper-v major + minor version digits into the libvirt major digits. Then we can split the hyperv micro digits across the libvirt minor + micro. ie pack it using version = (major * 100,000,000) + (minor * 1,000,000) + micro If any libvrt apps are trying to reverse parse this and turn it back into dotted values, it is going to look wierd, but at least we won't be discarding information. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|