Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scarf-sh/nomia
A system for precise, efficient resource management across every domain and resource type.
https://github.com/scarf-sh/nomia
Last synced: 3 months ago
JSON representation
A system for precise, efficient resource management across every domain and resource type.
- Host: GitHub
- URL: https://github.com/scarf-sh/nomia
- Owner: scarf-sh
- License: apache-2.0
- Created: 2020-10-09T18:22:46.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2021-06-01T11:22:30.000Z (over 3 years ago)
- Last Synced: 2024-05-31T08:31:56.090Z (5 months ago)
- Language: Nix
- Homepage:
- Size: 591 KB
- Stars: 153
- Watchers: 11
- Forks: 2
- Open Issues: 9
-
Metadata Files:
- Readme: README.org
- License: LICENSE
Awesome Lists containing this project
README
#+TITLE: Nomia
[[https://discord.gg/mSc4yXF2RV][https://img.shields.io/discord/832288508450308116.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2]]
#+ATTR_HTML: :alt Nomia: A system for precise, efficient resource management across every domain and resource type.
[[./banner.png]]* Table of Contents
- [[#what-is-nomia][What is Nomia?]]
- [[#introduction][Introduction]]
- [[#Documentation][Documentation]]
- [[#community][Community]]* What is Nomia?
Nomia is inspired by tools such as Nix, Unison, and Git. They all provide distinct, immutable names for resources like packages, code, and files. Nomia wants to bring them together (and more!) to make reproducing whole environments—from your editor to code to data to complete running services—as easy as ~git switch~.
Nomia's a growing project and we want you to help shape it. [[https://discord.gg/mSc4yXF2RV][Join us on our Discord server]] or [[#community][attend a pairing session]].
* Introduction
Nomia provides a systematic mechanism for giving names to any kind of resource, composing those names together to identify new composite resources, and acquiring access to the resources thus identified. These capabilities allow for precise, efficient resource management, all using a single unified abstraction applicable across domains. Nomia solves the problem of cache invalidation by solving the problem of naming things, and that's just for starters!There are other systems that provide similar capabilities. [[https://nixos.org/][Nix]] provides mechanisms to identify packages by their exact build steps and the inputs they rely on, enabling fully reproducible package management with efficient sharing of common dependencies between builds and systems. [[https://www.unisonweb.org/][Unison]] provides mechanisms to identify immutable pieces of code by content, allowing precise code dependency management, distributed computation, and a transparent automatic compilation model. [[https://git-scm.com/][Git]] provides mechanisms to identify files, filesystem trees, and source control artifacts like commits and tags by their content, enabling distributed source control with efficient sharing and transmission of changes. Inspired by these and similar systems, Nomia starts with these notions of identifying, combining, distributing, and creating resources by name, and builds upon them by:
- Allowing arbitrary kinds of resources to be identified within the system and combined. Nomia can handle packages, services, pieces of code, entire data centers, individual time-slices of CPU work—any type of resource you can work with.
- Enabling domain-specific notions of the precision and semantics of names to coexist. Nomia names can capture identifications as precise as "the build of the Acme webserver from revision ~b7397db~ built inside a fresh docker container based on ~ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d~" or as loose as "the latest version of the user's favorite browser, either cross-compiled or native-compiled to target ARMv8", and combine them together.
- Having a first-class representation of relationships /between/ names; identifying refinements of resource names; and enabling efficient reuse of existing resources, resource storage mechanisms, and resource creation mechanisms. A name which specifies "the latest version of the user's favorite browser, either cross-compiled or native-compiled to target ARMv8" might, at a particular invocation, /reduce to/ "firefox 87.0 cross-compiled from amd64 linux", which we may have already built or already know how to build.In the Nomia-powered future, you will be able to:
1. Point your editor to ~(client-projects:acme):server//src/main.cc~ and have the latest version of the Acme server source code downloaded to your machine, the ~main.cc~ file opened, and the dependencies loaded for use by your editor's code checker.
2. Make a change and point your browser to ~nomia://(client-projects:acme):server/login~ and have the Acme server built (reusing the results of the latest CI build for unchanged files), the service and its dependencies started, and the login page for your local instance loaded into your browser.
3. Tell your deployment tool to modify the staging environment with the replacement ~acme-server => (client-projects:acme):server~ and have the local ~(client-projects:acme):server~ automatically reduced to the more deterministic ~cmake:c++-project(input: immutable-filesystem-object?hash=9368819aaf6f619ec109e544b56ca05a21375ca671d00dbf7532e0b69aded39a)~ and the results shipped off to your staging environment with all downstream dependencies pointing to your changed service.Behind the scenes of each step, Nomia will be driving name resolution and resource acquisition.
# TODO the gif story should go here, maybe replacing the previous 3 step description
* Documentation
Nomia is in early active development, and we are fleshing out the documentation as we go. For now, the following resources are available:- The [[https://github.com/scarf-sh/nomia/releases/download/2.0.1/deep-dive.pdf][Deep Dive Into Nomia]] paper expands on the motivation for and the conceptual model underlying Nomia in detail.
- The Nomia name representation is specified in the [[https://github.com/scarf-sh/nomia/releases/download/2.0.1/name-grammar.pdf][formal grammar]].
- The [[./roadmap.org][roadmap]] shows one possible near-term implementation plan.
- This [[https://discourse.nixos.org/t/announcing-nomia-a-general-resource-manager-inspired-by-nix/12591/1][thread]] on the NixOS discourse goes into some more detail about how Nomia relates to Nix.
- This [[https://about.scarf.sh/post/announcing-nomia-and-the-scarf-environment-manager][blog post]] announces Nomia, and relates it to [[https://about.scarf.sh][Scarf]]'s mission and related work.
- The [[https://github.com/scarf-sh/scarf][Scarf CLI]] is currently implemented on top of an internal prototype of basic Nomia capabilities. These will be reimplemented as standalone components (likely in Rust) and moved into this repository.
* Community
Nomia's community currently centers around this GitHub repository and our [[https://discord.gg/mSc4yXF2RV][Discord server]]. We hope to see you there!We host the following events on Discord. *The time for these events is easy to change based on community availability, please reach out on Discord if you'd like to come!*:
- Scheduled pairing :: 2:00 PM - 4:00 PM UTC (10:00 AM - 12:00 PM ET), Wednesdays and Fridays
- Project update :: 5:30 PM - 6:30 PM UTC (1:30 PM - 2:30 PM ET), last Friday of the month
- Unscheduled pairing :: Ad hoc, announced in the #announcements channel on Discord.See the [[https://calendar.google.com/calendar/u/6?cid=Y19ydTA3ZDcwcDR0dDRhZjJhNDl0N3FzaWY2Y0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t][calendar]] for more details.
[[https://static.scarf.sh/a.png?x-pxid=65d365d1-2d51-4fe9-a193-b5332849e5f6]]