Apache Ossie alternative

The Apache Ossie alternative: a language with a compiler and a verifier

Synalog definitions build on each other, compile to SQL on seven engines and are verified before they run.

At a glance

SynaLemma vs Apache Ossie at a glance

SynaLemma vs Apache Ossie at a glance
CriterionSynaLemmaApache Ossie
What it is A language with a compiler and a verifierA YAML specification for exchanging definitions
Runs queries Yes: compiles to SQL for seven enginesNo: each tool that reads the file decides
Definitions build on each other Yes: rules use other rulesNo: a metric cannot reference another metric
Relationships Any relationship a rule statesMany-to-one foreign keys
Hierarchies and multi-hop chains Native recursion, verified to terminateNot expressible
What checks the definitions A symbolic verifier, plus assertions on the dataValidation against the schema and references
For agents The analyst writes rules the verifier checksFree-text hints (ai_context) for a model to read
Apache Ossie

Why teams look for an Apache Ossie alternative

  • A file format only

    Ossie does not run queries; each tool decides how to turn it into SQL (Ossie).

  • No composition

    A metric cannot reference another metric, and datasets cannot build on each other (spec).

  • Many-to-one only

    Every relationship is a many-to-one foreign key (relational semantics).

  • Schema validation only

    A valid file says nothing about what its metrics compute.

SynaLemma

SynaLemma vs Apache Ossie: key differences

  1. A compiler

    One Synalog program compiles to SQL for PostgreSQL, BigQuery, Databricks, Trino, Presto, DuckDB and SQLite.

  2. Definitions that build on each other

    Rules use other rules, so a definition is written once and reused.

  3. Recursion and time

    Hierarchies, multi-hop chains, negation and reasoning over time, in the same language.

  4. A verifier and assertions

    Every rule is proved well-formed, safe and terminating, and assertions check the data with counterexamples.

Synalog

Example: a definition and its assertions

Revenue per customer, with three assertions. Customer 12 is missing from the customers table; the engine names the row.

shop.l
Order(order_id:, customer_id:, amount:, status:) :- orders(order_id:, customer_id:, amount:, status:);
Customer(customer_id:, country:) :- customers(customer_id:, country:);

@Assert(Revenue,
      one_row_per_customer: "∀ c r s, Revenue c r → Revenue c s → r = s",
      known_customer:       "∀ c r, Revenue c r → ∃ k, Customer c k",
      positive:             "∀ c, Revenue c > 0");
Revenue(customer_id:, revenue? += amount) distinct :-
  Order(customer_id:, amount:, status: "delivered");
$ synalog shop.l verify
✓ Revenue.one_row_per_customer holds ✗ Revenue.known_customer is violated: ∀ c r, Revenue c r → ∃ k, Customer c k 1 counterexample: +----+----+ | c | r | +----+----+ | 12 | 20 | +----+----+ 1 row ✓ Revenue.positive holds
FAQ

Apache Ossie alternative: FAQ

What is the difference between Apache Ossie and Synalog?

Ossie is a YAML format for exchanging definitions; it does not run queries. Synalog is a language with a compiler and a verifier.

Can an Ossie metric reference another metric?

Not in Ossie's current version. In Synalog, rules use other rules.

Is a semantic layer file enough for AI agents?

No. A file gives a model hints. SynaLemma verifies every definition an agent writes before it is used.

Sources

  1. Apache Ossie
  2. Ossie core specification
  3. Ossie relational semantics
  4. Ossie expression language
  5. Synalog on GitHub (Apache-2.0)

Checked against each product's public documentation on the review date. To report an error: contact@synalinks.com.

Other comparisons

See it on your data

Bring a question your current stack can't answer.

In 30 minutes, we show SynaLemma answering it, with the rule behind the number and the checks it passed.