All Projects → uwplse → Verdi

uwplse / Verdi

Licence: bsd-2-clause
A framework for formally verifying distributed systems implementations in Coq

Projects that are alternatives of or similar to Verdi

Verdi Raft
An implementation of the Raft distributed consensus protocol, verified in Coq using the Verdi framework
Stars: ✭ 143 (-71.17%)
Mutual labels:  proof, coq, distributed-systems
Disel
Distributed Separation Logic: a framework for compositional verification of distributed protocols and their implementations in Coq
Stars: ✭ 85 (-82.86%)
Mutual labels:  proof, coq, distributed-systems
Iron
Coq formalizations of functional languages.
Stars: ✭ 114 (-77.02%)
Mutual labels:  proof, coq
Dblib Linear
Formalisation of the linear lambda calculus in Coq
Stars: ✭ 10 (-97.98%)
Mutual labels:  proof, coq
coq-to-ocaml-to-js
Proof of concept to generate safe and fast JavaScript
Stars: ✭ 25 (-94.96%)
Mutual labels:  coq, proof
chapar
A framework for verification of causal consistency for distributed key-value stores and their clients in Coq [maintainer=@palmskog]
Stars: ✭ 29 (-94.15%)
Mutual labels:  distributed-systems, coq
imm
Intermediate Memory Model (IMM) and compilation correctness proofs for it
Stars: ✭ 15 (-96.98%)
Mutual labels:  coq, proof
InfSeqExt
A Coq library for reasoning (co)inductively on infinite sequences using LTL-like modal operators
Stars: ✭ 12 (-97.58%)
Mutual labels:  coq, proof
Chronicle
Public append-only ledger microservice built with Slim Framework
Stars: ✭ 429 (-13.51%)
Mutual labels:  proof
Hazelcast
Open-source distributed computation and storage platform
Stars: ✭ 4,662 (+839.92%)
Mutual labels:  distributed-systems
Cortx
CORTX Community Object Storage is 100% open source object storage uniquely optimized for mass capacity storage devices.
Stars: ✭ 426 (-14.11%)
Mutual labels:  distributed-systems
Moleculer
🚀 Progressive microservices framework for Node.js
Stars: ✭ 4,845 (+876.81%)
Mutual labels:  distributed-systems
Dslabs
Distributed Systems Labs and Framework
Stars: ✭ 461 (-7.06%)
Mutual labels:  distributed-systems
Nuraft
C++ implementation of Raft core logic as a replication library
Stars: ✭ 428 (-13.71%)
Mutual labels:  distributed-systems
Nsq
A realtime distributed messaging platform (forked from https://github.com/nsqio/nsq)
Stars: ✭ 476 (-4.03%)
Mutual labels:  distributed-systems
Tendermint
⟁ Tendermint Core (BFT Consensus) in Go
Stars: ✭ 4,491 (+805.44%)
Mutual labels:  distributed-systems
Odin
A programmable, observable and distributed job orchestration system.
Stars: ✭ 405 (-18.35%)
Mutual labels:  distributed-systems
Scalecube Services
ScaleCube Services is a high throughput, low latency reactive microservices library built to scale. it features: API-Gateways, service-discovery, service-load-balancing, the architecture supports plug-and-play service communication modules and features. built to provide performance and low-latency real-time stream-processing. its open and designed to accommodate changes. (no sidecar in a form of broker or any kind)
Stars: ✭ 482 (-2.82%)
Mutual labels:  distributed-systems
Pysyncobj
A library for replicating your python class between multiple servers, based on raft protocol
Stars: ✭ 468 (-5.65%)
Mutual labels:  distributed-systems
Dnpipes
Distributed Named Pipes
Stars: ✭ 452 (-8.87%)
Mutual labels:  distributed-systems

Verdi

Build Status

A framework for formally verifying distributed systems implementations in Coq.

Requirements

Framework:

Runtime:

Building

We recommend installing Verdi via OPAM, which will automatically build and install its dependencies:

opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev
opam install coq-verdi

To build Verdi manually, it is a good idea to first consult the opam file for exact requirements.

Then, run ./configure in the Verdi root directory. This will check for the appropriate version of Coq and ensure all necessary dependencies can be located. By default, the script assumes that StructTact, InfSeqExt, and Cheerios are installed in Coq's user-contrib directory, but this can be overridden by setting the StructTact_PATH, InfSeqExt_PATH, and Cheerios_PATH environment variables.

Finally, run make in the Verdi root directory. This will compile the framework's core specifications and proofs, as well as some simple example systems and their correctness proofs.

Runtime Library

To run Verdi systems on real hardware, event handler code must be extracted to OCaml and linked with one of the shims in the Verdi runtime library that handles low-level network communication.

To install the runtime library via OPAM, use the following commands:

opam repo add distributedcomponents-dev http://opam-dev.distributedcomponents.net
opam install verdi-runtime

Getting Started

To set up your own Verdi-based distributed systems verification project, we recommend basing it on Verdi LockServ.

Verdi LockServ contains a minimalistic implementation of a message-passing lock server and a proof that it maintains mutual exclusion between client nodes. At build time, extracted OCaml code is linked to a runtime library shim to produce an executable program that can be run in a cluster. There is also a simple script to interface with cluster nodes.

Documentation

In addition to the example verified systems listed below, see the scientific papers and blog posts listed at the Verdi website.

Files

  • Core Verdi files:
    • Verdi.v: exporting of core Verdi theories, imported by systems
    • Net.v: core (unlabeled) network semantics
    • LabeledNet.v: labeled network semantics, for use in liveness reasoning
    • HandlerMonad.v: a monad for writing network/input handlers
    • StatePacketPacket.v: a technique for writing easily decomposable invariants
  • Example systems:
    • Counter.v: counting server with backup
    • LockServ.v: lock server with proof of safety
    • LiveLockServ.v: lock server with proof of liveness
    • VarD.v: vard, a key-value store
  • Verified system transformers:
    • SeqNum.v and SeqNumCorrect.v, a system transformer implementing sequence numbering
      • LockServSeqNum.v, the sequence numbering transformer applied to the lock server
    • PrimaryBackup.v, a system transformer implementing asynchronous primary-backup replication
      • VarDPrimaryBackup.v, the primary-backup transformer applied to the key-value store

Projects using Verdi

  • Verdi Raft: a verified implementation of the Raft distributed consensus protocol
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].