I am new to virtualization as a concept, and am particularly interested in Xen.
A machine is a complex system composed of many parts/constituents:
- CPUs (one or more)
- RAM
- Hard drive
- Network card
- Motherboard
- Operating system running on top of everything
- Much more...
And so I imagine that a virtual machine must also model/virtualize all of these components. I played around with VirtualBox (just for ease/convenience) and sure enough, I had to select all of these things to "assemble" a virtual machine.
As a programmer, this piques my interest. Say I have a brand new network card, or CPU, or memory chip (whatever, doesn't matter) that I would like to make compatible with a hypervisor like Xen. Meaning, I want to write some code (?) produce some kind of binary/plugin, and allow Xen to use this artifact when constructing new virtual machines. So again, say I just created my own network card, the SmeebEthernets 5000
; when using Xen hypervisor to create a new, say, Linux VM, I want that Linux VM to be able to use my SmeebEthernets 5000
network card.
I'm wondering:
- What language/frameworks/APIs do I use?
- What is the resultant (compiled/linked/packaged) artifact that is produced (which is then compatible with whatever Xen expects)?
- Is this process different for each type of virtualized component (CPU, network card, OS, mobo, etc.)?
- Is there any kind of open source community building these types of virtualized components, repos I could peruse, etc.?
Example:
In the screenshot above, I have the choice between several bridged adapters. I'm sure Xen offers similar choices...but how? For instance in order to make the "Interl(R) Ethernet Connection I217-LM" an available choice in VBox, something had to be registered with VBox at some point...I'm asking what?