VirtualBox for the brave

I just uploaded an experimental packet that updates our VirtualBox port from version 6.1.38 to version 7.2.10. The packet is built for Sculpt 26.04 and can be downloaded from my depot. What is working, tested, and what not is tracked in issue #5891.

Feel free to try out the new version. Currently, there exists no installer, but if your are ready to possibly corrupt your VM (“Trust me, I know what I’m doing” :collision:), you can reuse any VDI or VMDK that works with our VirtualBox 6 port.

Here are the steps on how to reuse a previously setup VM:

  1. Update the index of ssumpf
  2. Download and install, but do not configure, ssumpf → Virtual machines → vbox7
  3. Copy the machine.vbox7 file from <used-fs>/depot/ssumpf/raw/vbox7/2026-06-22/machine.vbox7 into the directory that contains the VM’s machine.vbox6
  4. Edit machine.vbox7:
    • Replace <HardDisk uuid="{d65876fd-b855-4a35-bbfe-115447c1b9ba}" location="machine.vdi" format="VDI" type="Normal"/> with the corresponding line from your machine.vbox6 file
    • Replace <Image uuid="{d65876fd-b855-4a35-bbfe-115447c1b9ba}"/> with the corresponding line from your machine.vbox6 file
    • Adjust the RAM size (<Memory RAMSize="4096"/>) - if desired
    • Adjust the CPU count (<CPU count="2">) - if desired. I would not configure more than four CPUs at the current state
    • You can also enable EFI Boot by setting <Firmware type="EFI"/>
  5. Configure and start vbox7 → Good luck from here on!

In case you want to click together the configuration, here the deploy that was generated during my test run:

deploy
+ option board   | required: yes
+ option sculpt  | required: yes
+ option managed | required: yes
+ option system_clock
+ option mixer
+ option black_hole
+ option window_manager
+ option recall_fs
+ option system_shell
+ child mesa_gpu-cpu | pkg: genodelabs/pkg/mesa_gpu-cpu/2026-05-18 | priority: -3
  + connect
    + rm | + parent
+ child vbox7 | pkg: ssumpf/pkg/vbox7/2026-06-22 | priority: -3
  + affinity | xpos: 0 | ypos: 1 | width: 4 | height: 1
  + connect
    + fs vm               | + child nvme-1.4.fs | prepend_resource: /vm/ubuntu-22.04
    + fs shared           | + child nvme-1.4.fs | prepend_resource: /shared
    + vm                  | + parent
    + gpu                 | + child black_hole
    + gui                 | + child wm
    + nic                 | + child network
    + rom capslock        | + child report | label: global_keys/capslock
    + rom platform_info   | + parent       | label: platform_info
    + report shape        | + child wm
    + report clipboard    | + child wm
    + rom clipboard       | + child wm
    + rom mesa_gpu.lib.so | + child mesa_gpu-cpu
    + rm                  | + parent
    + rtc                 | + child system_clock
    + usb                 | + child usb
    + play                | + child black_hole
    + record              | + child black_hole
-

This should give some hints on what to start and what to select. I then converted vbox7 into an option and put it into the model/option folder. This way I can just start vbox7 using the System → Options dialog. Here the option:

option
  + child  vbox7 | pkg: ssumpf/pkg/vbox7/2026-06-22 | priority: default | ram: 8G
    + affinity | xpos: 0 | ypos: 1 | width: 4 | height: 1
    + connect
      + fs vm               | + child nvme-1.4.fs | prepend_resource: /vm/ubuntu-22.04
      + fs shared           | + child nvme-1.4.fs | prepend_resource: /shared
      + vm                  | + parent
      + gpu                 | + child black_hole
      + gui                 | + child wm
      + nic                 | + child network
      + rom capslock        | + child report | label: global_keys/capslock
      + rom platform_info   | + parent       | label: platform_info
      + report shape        | + child wm
      + report clipboard    | + child wm
      + rom clipboard       | + child wm
      + rom mesa_gpu.lib.so | + child mesa_gpu-cpu
      + rm                  | + parent
      + rtc                 | + child system_clock
      + usb                 | + child usb
      + play                | + child black_hole
      + record              | + child black_hole
-

You can also use the option as a basis and adjust the location of the fs vm node. In case you configured more than 4GB of RAM for the VM (default), you also have to provide a ram attribute, because vbox7 will require more RAM than configured in the recipe. In the example above I set ram: 8G.

Have fun testing and feel free to report any problems here or in #5891. Cheers!

6 Likes

This is a very exciting development for me!

Due to my stupidity, I upgraded my VMs to VBox 7 about a year ago, after which I could no longer run them in Genode’s VBox 6. I’ve been too lazy to try to downgrade them, so I’ve been in limbo for a while.

In my initial testing with an existing VM, this mostly works for me on my ThinkPad Yoga L380 (Intel). (I couldn’t hear audio, but I will tinker around with that.) It feels good to be back again!

On my Framework 16, with the same VM, it gets stuck right after Grub (v2), and never shows the Linux console output. I will continue tinkering with that also, since it could be a configuration issue.

I should probably ask this in a new thread, because it’s not specific to VBox 7, but are there any thoughts of adding “Save the machine state” support? I use this feature often, and to good effect - e.g., I have a script that uses VBoxManage to “savestate” all my VMs if the power gets too low, but also just to keep my state if I need to reboot the host, etc.

Thanks a million for this port!

Great! Audio is still disabled by default because we run into some issue with Ubuntu 24.04. You can enable it by changing:

<AudioAdapter controller="HDA" driver="OSS" enabled="false" enabledIn="false" enabledOut="false"/>
to
<AudioAdapter controller="HDA" driver="OSS" enabled="true" enabledIn="true" enabledOut="true"/>

in the machine.vbox7 file. You need to start the mixer and audio options and route the Record and Play sessions to the mixer.

This situation with the Framework sounds unfortunate, but we have some Framework users in the office. So any issues should be resolved eventually.

As far as I know there are currently no plans to support saving the VM state.

Thanks for testing.

1 Like

The Framework 16 is equipped with an AMD CPU to my knowledge, which we do not support with VirtualBox, right?

If that’s so, that sounds like the reason.

Thanks - that worked! I like to think I would have found that eventually, but it saved me some time. :slight_smile:

That explains it. Yes, the Framework 16 uses an AMD CPU.

I have no idea what’s involved in adding AMD support to VirtualBox - is that on the roadmap?

FYI: I have just published a packet that updates VirtualBox to version 7.2.12. What I gather from the Bug reports is that the 7.2.12 release mostly fixes Kernel crashes on Alpine (Changelog). Otherwise, VirtualBox 7 has become almost feature complete (#5891) on Genode. As a next step I will install VirtualBox 7 as a daily driver on my system (Gentoo VM with raw disk access). So if you are brave, checkout vbox7 version 2026-07-10 from my depot.

1 Like

I’ve successfully tested your current Vbox7 package on top of the hw kernel. It works like a charm. Congratulations to your fantastic work!

2 Likes

Great, I have also tested base-hw and it generally works. If you compile VBox7 with assertions, one triggers because base-hw always sets bit 13 in cr4 which tells the VMM that VT-x is enabled within the guest (nested virtualization). I think this is caused by E_GUEST_CR in base-hw. If a disable the bit in VBox7 by hand, it works without triggering assertions. If I set E_GUEST_CR from 0x6804 to 0x4804 in base-hw, the VM crashes. I am not sure what’s wrong there.

Building VirtualBox under Ubuntu on Genode with 8 (!) cores.

A boost I have to get used to. So I moved the VM to my 8 E-Cores for now :stuck_out_tongue:

Kudos for the great work!

1 Like

I’ve just started using vbox7. Even without increasing the CPU count, it feels much more responsive than before. Starting a web browser in the VM took a few seconds with vbox6, now it starts in 1-2s. Marvellous!

1 Like

Just made the switch today and can happily report that the new version works splendidly for me as well. I haven’t stressed the VM enough to give a subjective impression about the performance yet but it feels good so far. Thanks to @ssumpf’s detailed instructions, the migration went super smooth.

I just noticed that copy-pasting files in the Caja file manager works again with vbox7! Awesome.

1 Like

I have just published a packet that updates VirtualBox to version 7.2.14 (Changelog). The version in my depot is 2026-08-03.

4 Likes

Great!
I’d like to give it a spin!
But I don’t have a VM yet.
I’d like to use my existing linux instance inside it and tying to follow this guide

But I’m failing to do so because the current virtualbox setup looks completely different from the one in the guide.
Could you please give me a hint on how to do this now? :sweat_smile:

Blimey, that post dates from 2021 and must be ancient history now given the speedy progress Sculpt makes.

Totally agree, but I can’t find more up to date info on how to do this :melting_face:
Also Seoul usage is still a complete mystery to me :pensive_face:

@G0retZ: Here is how I pass my whole hard disk with Linux and Grub installed to VBox7:

  1. Create a disk.vmdk file, like:
# Disk DescriptorFile
version=1
CID=6f6498e1
parentCID=ffffffff
createType="fullDevice"

# Extent description
RW 1953525168 FLAT "/dev/block" 0

# The disk Data Base 
#DDB

ddb.virtualHWVersion = "4"
ddb.adapterType="ide"
ddb.geometry.cylinders="16383"
ddb.geometry.heads="16"
ddb.geometry.sectors="63"
ddb.uuid.image="386d400b-0e8d-451f-ae1e-ec6f3a7be169"
ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
ddb.uuid.modification="4fc02c8c-a368-41ac-a809-1c9d198ece9b"
ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"
ddb.geometry.biosCylinders="1024"
ddb.geometry.biosHeads="255"
ddb.geometry.biosSectors="63"
  • Adjust RW 1953525168 FLAT "/dev/block" 0 to the number of sectors on your physical hard disk
  • The location of the disk.vmdk is the same as machine.vbox7
  1. Adjust machine.vbox7
  • Replace
    <HardDisk uuid="{d65876fd-b855-4a35-bbfe-115447c1b9ba}" location="machine.vdi" format="VDI" type="Normal"/>
    by
    <HardDisk uuid="{386d400b-0e8d-451f-ae1e-ec6f3a7be169}" location="disk.vmdk" format="VMDK" type="Normal"/>
  • Replace
    <Image uuid="{d65876fd-b855-4a35-bbfe-115447c1b9ba}"/>
    by
    <Image uuid="{386d400b-0e8d-451f-ae1e-ec6f3a7be169}"/>
    in section <StorageControllers>
  • Set Firmware type to EFI or BIOS - depending on your native-boot method
  1. Adjust theVBox7 configuration
  • The easiest way to achieve this is to create an option as described at the top of this post
  • Copy the whole + config node from depot/ssumpf/pkg/vbox7/2026-08-03/runtime into the vbox7 option
  • Add | + block | io_buffer: 8M to the + dir dev node in the + vfs node of + config
  • Route the block-session to the hard-disk driver in the vbox7 option’s + connect node
    (e.g., + block | + child nvme | label: 1 routes the block session to the first NVMe device (which would be 0 on Linux))

I hope this gets you started.

2 Likes

@ssumpf thank you a lot! :folded_hands: