A pure-Rust CAE modeling workspace following the SolidCraft conventions: - modelcraft-model: nodes and elements by label with hostile-input validation - modelcraft-geometry: SolidCraft's kernel (pinned git dependency) behind our own API; tessellation into a face-tagged boundary surface for volume meshing - modelcraft-engine: CommandSpec registry, Session::execute with rollback and panic guard, scripts and a journal - modelcraft-cli: list commands, run scripts - xtask: layers (only geometry may use solidcraft-*), assets, licences, tests, wasm, ci - AGENTS.md, architecture, ADR 0001 (libraries and licences), roadmap, CI Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
2.3 KiB
ADR 0001: Libraries and licences
Status: accepted (2026-10-13)
Context
ModelCraft is MIT OR Apache-2.0. Everything it links must allow that, and the meshing and solver algorithms, where the obvious open-source implementations are GPL-family, must come from papers.
Decision
Geometry: SolidCraft's kernel, as a git dependency pinned by rev
(solidcraft-kernel, solidcraft-geom; MIT OR Apache-2.0, built on the Apache-2.0 truck
crates). ModelCraft uses its B-rep bodies and its tessellation; it does not read CAD exchange
files itself. Only modelcraft-geometry may depend on it.
Meshing: our own, implemented from published papers (docs/meshing/literature.md).
Robust predicates follow Shewchuk's adaptive-precision arithmetic (the paper; his reference
predicates.c is public domain). A permissive crate may be adopted instead after review; record
it here.
Linear algebra: to be decided in the solver task, among permissively licensed pure-Rust
crates (for example faer, MIT). Record the choice here.
Allowed: MIT, BSD-2/3, Apache-2.0, ISC, Zlib, Unicode, MPL-2.0 (as an unmodified dependency), CC0 and public domain.
Rejected — never read, copy or link:
| Project | Licence | Would have offered |
|---|---|---|
| TetGen | AGPL-3.0 | constrained Delaunay tetrahedralization |
| CGAL | GPL-3.0 / LGPL-3.0 | Delaunay, mesh generation |
| Gmsh | GPL-2.0+ | tet and hex meshing |
| Netgen | LGPL-2.1 | tet meshing |
| CalculiX | GPL-2.0 | implicit solver, Abaqus-like input |
| Code_Aster | GPL-3.0 | implicit solver |
| OpenRadioss | AGPL-3.0 | explicit solver |
| Elmer | GPL-2.0 / LGPL-2.1 | multiphysics solver |
| deal.II, FreeFEM, Salome | LGPL | FE libraries, pre-processing |
| OpenCASCADE | LGPL-2.1 | B-rep kernel |
Commercial products (Abaqus, Nastran, LS-DYNA, LS-PrePost, HyperMesh, ANSA, Femap, Patran, ANSYS) are never run, scripted or used as a source of data. Deck formats come from the vendors' public reference manuals, described in our own words with our own examples.
Consequences
- The tet and hex meshers are significant original work; the literature survey decides the order and the methods.
- SolidCraft and ModelCraft move together: bumping the pinned rev bumps the repeated
[patch.crates-io]entries in the same commit.