When Soda changed its license from Apache 2.0 to Elastic License v2, teams that relied on Soda Core as open source infrastructure had to re-evaluate. This post explains what changed, what it means for you, and what alternatives exist.
What happened
Soda Core was originally released under Apache License 2.0. In 2023, Soda switched to the Elastic License v2 (ELv2). The change applied to all new versions of Soda Core and its associated packages.
ELv2 is not an open source license by the OSI definition. It adds two restrictions that Apache 2.0 does not have: you cannot offer the software as a managed service, and you cannot modify the license key functionality. For internal use at most companies, ELv2 is permissive enough. But for platform vendors, consultancies embedding Soda in their products, or organizations with strict open source policies, it creates friction.
Who is affected
Internal data teams (Low impact) -- ELv2 allows internal use. You can keep using Soda Core if the license terms work for your legal team.
Data platform vendors (High impact) -- If you embed data quality checks in a product you sell, ELv2 prohibits offering it as a managed service without a commercial agreement.
Consultancies and integrators (Medium impact) -- Depends on how you distribute. If you ship Soda as part of a client deployment, review the license terms with legal.
Open source projects (High impact) -- ELv2 is not OSI-approved. If your project requires OSI-approved dependencies, you cannot depend on Soda Core.
This is a pattern, not an exception
Soda is not the first data tool to make this move. The playbook is familiar across the industry: release as open source, build adoption, then change the license to protect a commercial offering. Elastic did it. MongoDB did it. HashiCorp did it. Each time, the community had to decide whether to accept the new terms, fork the project, or find an alternative.
The pattern is rational from a business perspective. But it breaks trust with teams who built infrastructure on the assumption that the license would not change.
What Provero does differently
Provero is licensed under Apache 2.0. Every feature ships in the open source package: anomaly detection, data contracts, all 16 check types, the CLI, the Airflow provider. There is no cloud-only tier and no feature gating.
We are pursuing acceptance into the LF AI & Data Foundation, which means the project would be governed by a neutral foundation, not a single company. Foundation governance makes unilateral license changes structurally difficult.
| Provero | Soda Core | |
|---|---|---|
| License | Apache 2.0 | ELv2 |
| OSI approved | Yes | No |
| Managed service allowed | Yes | No |
| Anomaly detection | Included | Cloud only |
| Data contracts | Included | Partial (Cloud for full) |
| Governance | Targeting LF AI Foundation | Soda Inc. |
| Check format | YAML | SodaCL |
| Migration path | provero import soda |
N/A |
Migrating from Soda
If you have existing SodaCL checks, Provero includes a converter that maps Soda check syntax to Provero YAML:
pip install provero
provero import soda checks.yaml -o provero.yaml
provero run
| SodaCL | Provero |
|---|---|
missing_count(col) = 0 |
not_null: col |
duplicate_count(col) = 0 |
unique: col |
row_count > 0 |
row_count: { min: 1 } |
freshness(col) < 24h |
freshness: { column: col, max_age: 24h } |
valid_count(col) = ... |
accepted_values: { column: col, values: [...] } |
Checks that don't have a direct equivalent are preserved as YAML comments, so nothing is silently dropped.
Our position on licensing
We think data quality is infrastructure. It belongs in the same category as linters, test frameworks, and CI tools. You would not accept a linter that moved half its rules behind a paywall. Data quality checks should work the same way: open, portable, composable.
Provero will stay Apache 2.0. Not because we are against commercial models, but because we believe the right way to build a business around open source is to sell services, hosting, and support on top of a fully open core. Not to restrict the core itself.
pip install provero
provero init
provero run
Top comments (0)