Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Wiser – minimal hypervisor boots Linux VM, written in C (github.com/flouthoc)
136 points by flouthoc_fl 6 days ago | hide | past | favorite | 31 comments

Not a lot of meat on this, but it looks nice from glancing at all the bits. I would recommend that you read the CPUID bits from the real CPU and copy most of them over so that the kernel can enable features like SSE4.x, AVX/AVX2 and various others. Use KVM_GET_SUPPORTED_CPUID and then KVM_SET_CPUID2.

I would also set the CPU name to KVMKVMKVM and enable a few of the paravirtual devices like KVMCLOCK.

Good luck with your project!

This is a really nice feedback, thanks a lot.

also really thanks for discussing about CPU SIGNATURE specifically.

Once I read an LWN article about KVM [1] and it introduced a tool called kvmtool [2] and a tiny test program illustrating how to use the KVM API. However the sample program was too simple and the latest kvmtool seemed too complex for my taste.

Wiser seems simple enough (5 small enough .c files). If it is capable to boot Linux, it can be a great learning material. Great job!

- [1] https://lwn.net/Articles/658511/

- [2] https://git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool...

Its is hypervisor-ish as of now more like a vm monitor.

Why do you call it a hypervisor when it's more like a VMM?

Even the name "VMM" is a quirk of KVM; before KVM, "virtual machine monitor" was another name for a hypervisor: that is, the thing that ran on the bare hardware and provided the virtual hardware interface to the VM. KVM has fairly unique architecture, where a VM is basically a process.

I'm willing to tolerate that "drift" of meaning, because we need a word for the piece of software which converts a process into a VM, and "VMM" is a good fit. But I'd have to really object to the idea of calling such a piece of software a "hypervisor".

If your plan is to make wiser into an actual hypervisor at some point, I'd appreciate it if you made that clear in your README.

@gwd you are correct vmm is a better fit. I'll update the repo thanks for the feedback :)

KVM isn't particularly unique in its process architecture. It is a classic "type 2 hypervisor", just as Wiser is.

I do prefer VMM as the term though.

it is*

Wow, nice work, great name

What's your roadmap?

Its something to think upon. As of now i don't have anything, just fix bugs and complete unfinished components maybe :).

Excuse my ignorance, but what is this sort of thing used for?

An excellent example is Marcan's m1n1 hypervisor. He uses it to boot MacOS to inspect interactions between the OS and hardware calls.

Part of his efforts to have native linux on m1 CPU based apple devices.

There is a very technical video he gives an overview of his hypervisor: https://www.youtube.com/watch?v=igYgGH6PnOw

How is it better than libkrun (written in Rust but with a C API).

This whole "written in Rust" as if it was a feature BS must stop someday.

Get the project 'A' features and compare with project 'B' features, the strength and weakness of programming languages will be apparent, on the features, runtime speed, bugs, etc..

Choosing a project over another just because its in a given language is not based on logical reasoning, but emotional reasoning and therefore the bad paths will get evident with time (Except of course if the language is really unsuitable to the domain, which is not the case here whether with C or Rust).

This emotional bias for me is a reason to actually look at Rust projects with suspicious if people working on it know its just another tool with some given properties and not some magical wand that will turn everything into unicorns and rainbows.

Note: this is also targeted at "why you would want to choose C over others ?" comment bellow in the same line

> This whole "written in Rust" as if it was a feature BS must stop someday.

I hope you can notice the hypocrisy when the title of this post has "written in <language>" in it but you have no qualm with it. The comment you are responding to didn't imply anything, it could have mentioned any language, try to read with a more open mind

It will take a few years. We just got over the "written in Go" era.

afaik one of the reasons it is considered a feature is memory safety. i agree a better selling point would be to say "written in a memory safe language".

Rust is a langauge which exists because colleges want to churn out programmers who do have not spent the requitisre 4 years required to learn C. I really think we need some sort of licensing for programming...

Colleges should not be churning out "programmers" with skills in one language. Trade schools would be better for that.

In college I learned theory and algorithms, and was exposed to half a dozen programming languages at least. I mastered none of them, that wasn't the point.

yeah, and that license should be revoked if you decide to use a memory unsafe language for code exposed to untrusted input

Didn't you hear? It's only programming if you use assembly.

Use of a memory safe or high level language results in immediate revocation of the Programmer Card™.

Are you implying that Rust takes less time to "learn" (whatever that means) than C? Have you seen Rust?

I think it's commonly accepted that it takes less time to write memory-safe code in Rust than in C. It's also commonly accepted that for stuff where you can leverage a lots of libraries and mostly write glue code, Rust is faster than C. It's up to you to evaluate if those are your goals or not.

Rust does take less time to learn than C.

actually its not at all better but maybe different , libkrun is far more advanced and has a better support. Wiser is only restricted as a CLI tool as of now.

It's another option.

why you would want to choose C over others ?

I guess because it works?

I don't fear Rust Evangelism Strike Force. Bring it.

Maybe because it is their own project and it is their rights to do however they see fit.

The author has also written a Rust project: a minimal Linux container framework. I guess these projects are for learning purposes...

Applications are open for YC Winter 2022

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact