- C++ 100%
|
Jens Finkhaeuser
b0c40b5a17
Some checks failed
/ build-meson (arm64, map[cc:clang cxx:clang++]) (push) Successful in 6m15s
/ build-meson (arm64, map[cc:gcc cxx:g++]) (push) Successful in 5m5s
/ build-conan (arm64) (push) Successful in 7m47s
/ checks (push) Has been cancelled
/ build-meson (x86_64, map[cc:clang cxx:clang++]) (push) Has been cancelled
/ build-meson (x86_64, map[cc:gcc cxx:g++], true, true) (push) Has been cancelled
/ build-conan (x86_64) (push) Has been cancelled
/ build-android (android-arm64-v8a.conan) (push) Has been cancelled
/ build-android (android-armeabi-v7a.conan) (push) Has been cancelled
/ build-android (android-x86.conan) (push) Has been cancelled
/ build-android (android-x86_64.conan) (push) Has been cancelled
|
||
|---|---|---|
| .forgejo/workflows | Add docs directory | |
| .well-known | Add well-known funding url | |
| changelog.d | Update changelog | |
| cli | Disable random_size CLI test for now | |
| data | Install magic file for detecting vessel resources | |
| docs | Add terminal casts | |
| include | (void) and () have different meanings in C | |
| lib | Catch author deserialization errors and report them back safely. | |
| plugins | Create plugins for algorithm choices | |
| scripts | No longer needed | |
| subprojects | Bump subprojects | |
| test | More changes for wyrd integration | |
| tools | Fix omission of the end of enum declaration | |
| .appveyor.yml | appveyor config | |
| .appveyor_account.yml | Add appveyor scripts | |
| .bumpversion.cfg | Bump version: 0.1.0 → 0.1.1 | |
| .gitignore | Ignore conan files | |
| .oclint | Boilerplate: oclint config | |
| .semgrepignore | Update copyright notice; there was an error | |
| AUTHORS | Add codemeta.json, SPDX identifier | |
| build-config.h.in | Basic CLI, first half-baked command. We need some internals improved for the rest | |
| CHANGES | Update changelog | |
| CODE_OF_CONDUCT.md | Boilerplate: license, etc | |
| codemeta.json | Remove caprock from deps | |
| conandata.yml | We need a newer s3kr1t for MAC calculation | |
| conanfile.py | Add docs directory | |
| CONTRIBUTING.md | Update changelog | |
| DCO.txt | Changelog and other boilerplate update | |
| LICENSE | Boilerplate: license, etc | |
| meson.build | Bump version: 0.1.0 → 0.1.1 | |
| meson_options.txt | The icu_force_subproject option is a feature provided by meson itself | |
| Pipfile | Update pipfile | |
| Pipfile.lock | update pipenv | |
| README.md | Add pre-recorded CLI video | |
| towncrier.toml | Changelog and other boilerplate update | |
Vessel
Vessel is a generic container file format optimized for storage and (streaming) transmission.
status-badge Build status Donate now Merch store
The full specification lives at specs.interpeer.io. This is the reference implementation.
There exists an older, partially outdated design document. It may provide some additonal rationale the specifications are missing.
Overview
The purpose of Vessel is to provide a generic container file format suitable for authoring content collaboratively, both in real-time or with eventual merging. It is suitable for encapsulating an authoritative view of the resource, or managing multiple diverging versions. Confidentiality and authentication of content are both supported.
In Vessel, resources are subdivided into standalone extents; a single extent can form a complete resource. Extents relate to their ancestors in a way that permits deterministic ordering at any time, even with partially synchronized resources. In this way, eventual merging is supported. Each extent is created by a single author, but extents from multiple authors can be mixed freely in a single resource.
Note that this functionality is similar, but not the same as a conflict-free replicated data type. It is rather aimed at both providing a good encapsulation format for such functionality, but simultaneously allowing for arbitrary other content to be multiplexed into the resource. In this way, it is possible to encapsulate any, even multiple existing files into a single vessel resource, such as the audio and video sections of media such as DVDs/Blu-Rays.
Vessel achieves this by further subdividing extent payloads into sections, that are assigned to topics. Each topic may carry a content type describing the remainder of the topic's sections.
CLI Demo
API
The library is developed in C++, but for ease of integration with other projects provides a C API.
Building
Requirements
- meson for the build system. Meson is most
easily installed via python's
piptool. Installing Python als means you can use theandroid.pyscript for Android builds. - ninja or platform-specific tools for build execution.
- Vessel is implemented in C++, and requires some compiler support for the C++17 standard.
- Depending on which scheduler implementation you want to use, packeteer may require specific OS and kernel versions, e.g. Linux 2.6.9+ for the epoll scheduler, etc.
- For convenience, a
Pipfileis provided that installs meson and other development tools.
If you're running a recent-ish UNIX-derivative, it's probably best to just download Vessel and try to compile it.
Instructions
pip install pipenvpipenv installpipenv shell # the following occurs in the launched shellmkdir build && cd buildmeson ..
License & Acknowledgements
For the license, see the LICENSE file.
Vessel was initially developed under a grant from the NLNet foundation, as part of the European Commission's Next Generation Internet initiative.