Implementations & tools
These are the FZnSO projects we know of. Each one talks to the others only through the ABI, so any application below can load any solver library below.
Bindings
Section titled “Bindings”Bindings present the ABI in the types and conventions of one language, so neither side writes ABI code by hand. They live in the FZnSO repository (MIT).
| Binding | Applications | Solvers | Reference |
|---|---|---|---|
Rust crate fznso (rust/fznso) | yes | yes | Rust |
C++17 headers fznso.hpp and fznso_export.hpp (cpp/) | yes | yes | C++ |
Python package fznso (python/) | yes | no | Python |
C header fznso_types.h (c/) | yes | yes | ABI types |
Any other language with a C foreign-function interface can use the C header directly.
Solver libraries
Section titled “Solver libraries”| Solver | Paradigm | Repository | Licence |
|---|---|---|---|
| Gecode | constraint programming | Dekker1/gecode, branch feat/fznso | MIT, as Gecode |
| Huub | lazy clause generation | Dekker1/huub, branch feat/fznso | MPL-2.0, as Huub |
| HiGHS | mixed-integer programming | Dekker1/FZnSO-MIP | MIT |
| Gurobi | mixed-integer programming | Dekker1/FZnSO-MIP | MIT; Gurobi itself needs a licence |
| Z3 | satisfiability modulo theories | Dekker1/FZnSO-Z3 | MIT |
The HiGHS and Gurobi libraries share one translation into a linear model, but each declares the capabilities of its own solver. Installing solvers explains where to put a library so that applications find it.
Applications
Section titled “Applications”| Application | Repository | Licence |
|---|---|---|
| MiniZinc, through a generic FZnSO driver | Dekker1/libminizinc, branch feat/fznso | MPL-2.0, as MiniZinc |
The MiniZinc driver loads any FZnSO solver library by name and uses its capability declarations to decide which constraints stay native and which are decomposed.
These are in the FZnSO repository (MIT), under tools/.
| Tool | What it does | Guide |
|---|---|---|
librecord (solver record) | Sits in place of a solver, passes every call on, and writes a log | Recording and replaying |
fznso-replay | Replays the application’s side of a log against a solver | Recording and replaying |
libreplay (solver replay) | Replays the solver’s side of a log to an application, with no solver | Recording and replaying |
fznso-conform | Checks a solver library’s declarations and answers against the registry | tools/fznso-conform/README.md |
Add your project
Section titled “Add your project”If you build a binding, solver library, application, or tool for FZnSO, open a pull request that adds it to this page.