shellac

shellac is a suite of software which aims to provides OS-level process control for the Elixir language. The software is composed of two sub-projects which coordinate to accomplish this goal:

Build Instructions

You will need an Elixir toolchain (mix) and a Rust toolchain (cargo) to properly build this project. From the project directory run the following commands:

  1. mix deps.get -- download dependencies

  2. mix deps.compile -- compile dependences

  3. mix compile -- compiles lacca to the _build/ directory.

  4. NOTE: the compile step will run cargo build on the resin/ directory. The artifacts from this build will be placed in priv/resin/ which must be deployed with the lacca OTP application.

Since this project builds native code (a Rust executable), you will need to build this OTP application / release on the target platform. If you need to change how the resind executable is built you can modify the Makefile in this project directory.

Protocol Versioning

The lacca and resin programs do not follow standard semantic versioning guideliens. Please read the following to understand how the project's versions are controlled. The developer's suggest pinning both a major AND minor version when using build tools which expect semantic versioning. i.e: pin to "\~> 1.3.0" rather than "\~> 1.3" in your build tool. This would allow the patch version to change, but not the major or minor version.

The version number consits of protocol, library, and patch components. Their significance to the project is as follows:

NOTE: v0 of the protocol is considered unstable. For best results you should always build and deploy the v0 programs together.

Protocol Format

shellac v0 packets are sent on the wire as follows:

Packet Types

Packet types are as follows:

TBD

  1. Start Process (exec: string, args: [string]])
  2. Stop Process ()
  3. DataOut (ty: (Stdout | Stderr), buf: [u8])
  4. DataIn (buf: [u8])

Future Additions

Lacca Design

When the lacca application starts it will kick off a supervision process. To start an OS-level process lacca will perform the following initialization sequence:

TODO