Giter Site home page Giter Site logo

arbiter's Introduction

Arbiter

Arbiter is a cross-platform C library1 which implements the basic behaviors needed by any decentralized dependency manager or package manager, without being coupled to any particular use case, so that many more specific tools can be built on top.

In other words, Arbiter does not prescribe any one user experience—it just tries to solve those backend concerns which are common to all dependency managers.

1 Note that Arbiter is actually implemented in C++14, but currently only exposes a plain C API to minimize surface area and maximize interoperability.

Functionality

Some major features of Arbiter include:

Compliance with Semantic Versioning

Semantic Versioning, or SemVer, is a specification for what software version numbers mean, and how they should be used to convey compatibility (and the lack thereof).

Arbiter implements SemVer and incorporates it into its dependency resolution algorithm, so that complex versioning and compatibility logic does not have to be reinvented from scratch for each new tool.

Lazy, decentralized dependency resolution

Most package managers require a centralized server which has knowledge of all packages and versions in the system.

However, Arbiter resolves individual dependencies on demand, allowing them to be loaded from anywhere—even different places for different versions! This doesn’t preclude using a centralized server, but means that it is not a requirement.

… and more to come

For a full list of planned features, check out our backlog. If you’d be interested in making any of these a reality, please consider contributing!

Documentation

The Arbiter API is extensively documented in header comments, from which we periodically generate Doxygen pages. For the public C API, look at headers under include/arbiter/ in the file list of the documentation.

Examples

This repository contains not-production-strength examples for demonstrating how the Arbiter API can be used to build different functionality.

To compile all included examples, run make examples.

For more information about individual examples, see the README in each folder. Of course, there are almost certainly other possible uses that we assuredly haven’t thought of or implemented, so this shouldn’t be taken as an exhaustive showcase!

Bindings

Because the functionality of Arbiter is exposed in a C interface, it’s easy to build bindings into other languages. Currently, Arbiter already has Swift bindings, with more planned!

To compile all included bindings, run make bindings.

If you’d like to implement your own bindings, please let us know about them in a GitHub issue, and we can include a link here in the README.

License

Arbiter is released under the MIT license.

I am providing code in this repository to you under an open source license. Because this is my personal repository, the license you receive to my code is from me and not from my employer (Facebook).

arbiter's People

Contributors

ikesyo avatar jspahrsummers avatar kastiglione avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.