Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: A Go unikernel capable of running GUI programs (groups.google.com)
184 points by eliasnaur on April 14, 2020 | hide | past | favorite | 18 comments



Repo is here: https://git.sr.ht/~eliasnaur/unik

Some key points from the article:

> Unik pretends to be a Linux kernel, implementing enough system calls to fool the Go runtime.

> The gui program is run with https://gioui.org/

I could see this being useful to write GUI apps that need to run on tiny hardware to reduce the footprint, but the real sweet spot for unikernels I think is backend services. Cool project though!


Another alternative for bare metal Go is TamaGo, developed by F-Secure for their USB armory pen.

https://labs.f-secure.com/blog/tamago/


Also Nanos - https://github.com/nanovms/nanos for those who want to run go unikernels on gcloud || aws. (I'm involved in the project).


Thanks for the heads up.


Wow super cool project and it's super impressive that you could do that with only 6400 logical lines of code (according to cloc) and without any dependencies (expect one for the gui part & material icons).

Can you explain how you implemented the GPU? What resources did you use?


Absolutely terrible naming collision with another Go Unikernel project:

https://github.com/solo-io/unik


It is just a naming collision, not sure you need the superlative and adjective to point it out.


isotope (the JS layout library) and isotope.js (the JS view library) are arguably a naming collision despite having slightly different names. I feel like two projects having exactly the same name can have a qualifier to their collision added.


As is the idiomatic Go style


It's convention to try to avoid to use the same name as a different project of the same type, though.


Parent is making a joke, since Go itself was a namespace collision, arguably:

https://en.wikipedia.org/wiki/Go!_(programming_language)#Con...


Yeh. Unik is more of a unikernel orchestrator, like OPS is, versus the actual kernel itself. For the go implementation it uses gorump which we sponsored and then retired years ago in favor of Nanos our new kernel.

The naming "collision" though is so bad it really feels like a case of squatting the seo though. Outside of Nanos, Unik is the very first thing you'll find when searching for go unikernels.


What's the use-case for this? Is it for limited hardware devices or Docker containers?...


Super cool!

One question: why a UEFI boot loader? QEMU and others have mechanisms that support direct loading of an ELF binary. Was the original thinking to support bare metal? (Or maybe it's still in the cards?)


It happened by accident. Originally I wanted to run on bare-metal, and thought UEFI would be a good starting point. THen I never got around to adding multiboot and similar support.


Very cool!

Some thoughts:

Out of curiosity, did you do it for the hack value and learning or do you also see a practical use-case for this project?

Have you considered doing any demo videos/GIFs? Would be fun to see.


I was just looking for something similar last week. Cool work.


> GPU+mouse works, I ran out of time to implement a keyboard driver

Keyboard driver is usually the first and only thing I implement before getting demotivated and giving up.




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: