Roadmap - churchers/vm-bhyve GitHub Wiki

Version 1.3 (Dev)

  • User control over slot/function used for passthru devices, as well as the ability to configure the slot vm-bhyve should start at for automatic devices.
  • Ability to control wired memory via wired_memory="yes". Note that it is no longer possible to use bhyve_options="-S" for this purpose. bhyve_options still exists but we no longer scan it for -S in order to pass the same option to bhyveload.
  • Control over CPU topology using new bhyve CPU syntax. As far as I am aware, this will require a FreeBSD 12 host.
  • graphics_vga=on|off|io option to control the vga fbuf parameter. Instructions for OpenBSD under UEFI specified using this setting.
  • vm-bhyve will now automatically switch to ahci-hd for install media if it doesn't end with .iso. We also set this device as read-only.

Version 1.2 (Current FreeBSD Ports Version)

This is the current development version, and has the following new features:

  • Support for up to 32 AHCI devices on a single controller. Previously bhyve would add a new AHCI controller for each device. In particular, this heavily limited the number of devices that could be attached to a UEFI guest. (FreeBSD 12 only)
  • New vm set & vm get commands to manage global configuration variables. At the moment the only variable available is console, but this paves the way to make more of the basic functionality configurable.
  • 'Interactive' mode which starts a guest inside a tmux session. Unlike normal, the tmux session is not detached, providing a similar experience to running in foreground mode. However, the advantage of interactive mode is that the tmux session can be detached, leaving the guest running in the background.
  • Partial command support so for example, commands such as vm sw l can be used to list virtual switches.
  • 1.2 now defaults to a UTC clock for all guests unless specifically disabled. This seems more consistent and predictable.
  • "media" datastores. If you have a directory full of ISO images, it makes little sense to copy those all to $vm_dir/.iso. Now you can just add that directory as a media datastore and we will look for ISO files there. When running the install command we also accept a full path to an ISO, and will look in the current directory.
  • The vm start command can now start multiple guests at the same time.
  • Reworked virtual switches. Bridges are now named after the switch and code has been modularised
  • Better support for virtio-console devices

Version 1.1

  • Addition of "datastore" concept and vm datastore command set. This allows us to create multiple locations to store virtual machines. Guests can be created on a specific datastore, and we look in all locations when trying to find a guest specified by the user.
  • Moved "global" configuration into $vm_dir/.config/system.conf. For a short while we had both a switch and datastore configuration file. These are now combined, and we have new __config functions that load and access this file, so we don't have to continually resort to sysrc.
  • Removal of guest configuration setting. Users will need to make sure they have either loader="grub" or loader="bhyveload" specified for any guests that need it.
  • Support for UEFI graphics via VNC.
  • Support for using tmux instead of cu for the guest's serial console.

Version 1.0

The current plan is for the existing codebase (as of 0.12.5) to become v1.0 once I've had a few weeks to make sure there are no obvious bugs. I am happy with the current feature set. Various versions of FreeBSD/Linux/NetBSD/OpenBSD/Windows have all been tested and appear to work fine. I've tried setting 5 various guests to start on host boot, which started without issue.

As of 15th Apr, the current code has been promoted to 1.0-beta. I plan to leave it in this state for a week or two, with any changes just incrementing the revision/build number (which is now a separate integer number). After that I will move to 1.0 and submit a port update. Any functionality changes will now be 1.1 and will likely stay GitHub only for the time being. I would rather not send constant port updates to FreeBSD; Users wanting the latest and greatest can download from GitHub, anyone else can get a stable 1.0 from ports.

This version has now been branched to 1-0.stable. Ports will be updated with this version once I'm happy to take it out of beta. The version number has been simplified to just 1.0, with an additional build number. If any fixes are needed, they will be done on this branch, and if required, updated in ports with a 1.0-pX version number.

Version 0.12.5 (Completed)

  • Defaulted to partition 1 for grub guests, which means the partition option no longer needs to be specified in configuration if partition 1 is correct (which it is in most cases).
  • Added -f foreground option which allows guest (and installer) to be run in the foreground. This has proved very useful for installs, removing the need to connect to the console after running the vm install command.

Version 0.12 (Completed)

  • Added support for rctl limits

Version 0.11 (Completed)

Updated grub-bhyve support so we now use automatic grub.cfg files located on the host, and no longer pass boot commands directly to the loader. This provides the following benefits

  • The loader always runs on the guest console, so if the guest does not boot, users can access the loader using the vm console command.
  • If a user reboots a guest from the console, the loader will appear and the user has the option to either boot the default option (which will boot automatically), or access the grub command line.
  • In previous versions, grub-bhyve could hang and use 100% cpu if the boot commands were incorrect. This should no longer happen.
  • The boot command is no longer required for install or boot, simplifying the configuration file.

Version 0.10 (Completed)

Completely re-written the grub-bhyve support. Users have full control over the boot and install commands passed to the loader, using grub_installX and grub_runX options.