MCPcopy
hub / github.com/solo-io/unik

github.com/solo-io/unik @0.0 sqlite

repository ↗ · DeepWiki ↗ · release 0.0 ↗
618 symbols 1,920 edges 166 files 44 documented · 7%
README

Build and run unikernels

UniK (pronounced you-neek) is a tool for compiling application sources into unikernels (lightweight bootable disk images) rather than binaries. UniK runs and manages instances of compiled images across a variety of cloud providers as well as locally on Virtualbox. UniK utilizes a simple docker-like command line interface, making building unikernels as easy as building containers.

UniK is built to be easily extensible, allowing (and encouraging) adding support for unikernel compilers and cloud providers. See architecture for a better understanding of UniK's pluggable code design.

To learn more about the motivation behind project UniK, read our blog post.

To stay up-to-date on UniK, follow us @ProjectUnik and join us on our slack channel


Update:

The UniK Instance Listener, which is required for bootstrapping instances on Virtualbox and vSphere providers is now deployed as a unikernel! No more downloads from AWS. UniK now will automatically compile and deploy the Instance Listener as a unikernel when the daemon is launched. Read the updated instance listener documentation.

UniK no longer requires go or qemu as dependencies! All dependencies for UniK are now bundled into docker, including compilation of UniK itself. make install will no longer install UniK to your path. Instead, run make to pull containers and compile unik in an isolated (containerized) context with no need for dependencies. The UniK executable will be placed in unik/_build/. We recommend placing this binary in a path directory (such as /usr/local/bin) to make it easily accessible from anywhere on your system.


Documentation


Supported unikernel types:

  • rump: UniK supports compiling C/C++, Node.js and Go code into rumprun unikernels
  • OSv: UniK supports compiling Java code into OSv unikernels

We are looking for community help to add support for more unikernel types and languages.

Supported providers:

Roadmap:

  • additional provider support including OpenStack
  • dynamic volume and application arguments configuration at instance runtime (rather than at compile time)
  • adding a test suite
  • better code documentation
  • unik pull & unik push && unikhub for sharing unikernel images
  • multi-account support per provider (i.e. multiple AWS accounts/regions, etc.)
  • migrate from martini to echo
  • self-healing state (i.e. unik can identify when instances/imgaes/volumes no longer exist and self-correct rather than throwing errors)
  • mount boot volume and stop cookfs-ing filesystem (especiall for scripting languages) to reduce memory footprint, allow persistence writing to boot vol
  • ocaml support using MirageOs

UniK is still experimental! APIs and compatibility is subject to change. We are looking for community support to help identify potential bugs and compatibility issues. Please open a Github issue for any problems you may experience, and join us on our slack channel


Thanks

UniK would not be possible without the valuable open-source work of projects in the unikernel community. We would like to extend a special thank-you to rumpkernel, deferpanic, and cloudius systems.

Extension points exported contracts — how you extend this code

Compiler (Interface)
(no doc) [5 implementers]
pkg/compilers/interface.go
Provider (Interface)
(no doc) [3 implementers]
pkg/providers/interface.go
Resource (Interface)
(no doc) [3 implementers]
pkg/os/device.go
State (Interface)
(no doc) [1 implementers]
pkg/state/state.go
Partitioner (Interface)
(no doc) [2 implementers]
pkg/os/device.go
Part (Interface)
(no doc) [2 implementers]
pkg/os/device.go
DiskSize (Interface)
(no doc)
pkg/os/device.go

Core symbols most depended-on inside this repo

String
called by 74
pkg/providers/virtualbox/virtualboxclient/client.go
Name
called by 41
pkg/os/device.go
Get
called by 36
pkg/os/device.go
Save
called by 31
pkg/state/state.go
vboxManage
called by 23
pkg/providers/virtualbox/virtualboxclient/client.go
Run
called by 19
pkg/daemon/daemon.go
readClientConfig
called by 19
cmd/root.go
getClient
called by 17
pkg/providers/vsphere/vsphere_provider.go

Shape

Method 274
Function 204
Struct 100
Class 16
TypeAlias 15
Interface 9

Languages

Go88%
Java10%
TypeScript1%

Modules by API surface

containers/compilers/osv/java-compiler/wrap_java_main.go34 symbols
pkg/os/device_linux.go32 symbols
pkg/os/device.go29 symbols
pkg/os/device_other.go27 symbols
pkg/providers/interface.go25 symbols
instance-listener/bindata/instance_listener_data.go24 symbols
pkg/providers/virtualbox/virtualboxclient/client.go22 symbols
pkg/providers/vsphere/vsphereclient/client.go21 symbols
pkg/types/types.go19 symbols
pkg/providers/aws/aws_import.go15 symbols
containers/compilers/osv/java-compiler/java-main-caller-udp-bootstrap/src/main/java/com/emc/wrapper/Bootstrap.java14 symbols
pkg/os/utils.go11 symbols

Dependencies from manifests, versioned

REPLACE_WITH_GROUPID:REPLACE_WITH_ARTIFACTIDREPLACE_WITH_VERSION · 1×
com.vmware:vijava5.1 · 1×
javax.jmdns:jmdns3.4.1 · 1×
junit:junit3.8.1 · 1×
net.java.dev.jna:jna4.2.1 · 1×

For agents

$ claude mcp add unik \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact