Kernel SNAPSHOT

Released under the LGPL v3

Collaborative real-time feature modeling kernel for variED. Exposes a simple API that may be consumed by client and server to generate and propagate feature modeling operations. Written in Clojure to allow for a functional core, imperative shell architecture. Can be run in the JVM (on the server) or transpiled to JavaScript (on the client). Run `lein repl` and `(require 'api)` to access the kernel API, e.g. `(api/client-initialize! ...)`. Run `lein test` to run the integration tests. Run `lein codox` to generate this documentation. As an introduction, refer to the `kernel.api` namespace.

Installation

To install, add the following dependency to your project or build file:

[kernel "SNAPSHOT"]

Namespaces

kernel.api

API of the kernel.

kernel.core

Functional core of the kernel.

Public variables and functions:

    kernel.core.causal-dag

    Causal Directed Acyclic Graph, CDAG for short. The CDAG captures compound operations’ dependencies.

    kernel.core.compound-operation

    Compound Operation, CO for short. Compound operations are sequences of primitive operations (kernel.core.primitive-operation). They correspond to feature modeling operations.

    kernel.core.conflict-cache

    Conflict Cache, CC for short. Caches all conflicts a site detected.

    kernel.core.conflict-relation

    Conflict relation used by the MOVIC algorithm (kernel.core.movic to detect conflicts between competing operations.

    kernel.core.conflict-resolution

    Utilities for assisting in conflict resolution.

    kernel.core.feature-model

    Feature Model, FM for short. Implements a feature model representation and mutation operators.

    kernel.core.garbage-collector

    Garbage Collector, GC for short. Periodically prunes a site’s data structures to keep them as small as possible.

    kernel.core.history-buffer

    History Buffer, HB for short. Serves as a central storage for operation metadata. Only a performance optimization and not essential.

    Public variables and functions:

    kernel.core.message

    Defines what kinds of messages are exchanged among sites.

    kernel.core.movic

    The MOVIC algorithm introduced by Sun and Chen, 2002 for handling conflicting operations.

    kernel.core.primitive-operation

    Primitive operation, PO for short. Primitive operations create or update only one object in a feature model at a time. They are building blocks for more complex compound operations (kernel.core.compound-operation).

    kernel.core.topological-sort

    Sorts a set of compatible operations topologically according to kernel.core.compound-operation/preceding?.

    kernel.core.vector-clock

    Vector Clock, VC for short. Vector clocks are used to track causality of operations in the system.

    Public variables and functions:

    kernel.helpers

    Host-specific helper functions.

    kernel.i18n

    Defines strings for internationalization purposes.

    Public variables and functions:

    kernel.shell

    Imperative shell of the kernel.

    Public variables and functions:

      kernel.shell.client

      Client site control.

      kernel.shell.context

      Global site context. Contains all state managed by a particular site.

      Public variables and functions:

      kernel.shell.server

      Server site control.

      kernel.shell.site

      Site control shared both by clients and the server.