Error is.. well, an error. Unlike std::error_code, or etc, we use a string so that code can attach its own context. It's not perfect, but it's better than error categories, and that's good enough. A early idea for the api of kvm::VM is provided, but I'm not attached to it.