|
| 1 | +--- |
| 2 | +slug: dropping-solc-and-yul |
| 3 | +title: Dropping Solidity and Yul: Moving to a Community Open IR |
| 4 | +authors: [axe] |
| 5 | +tags: [announcement, compiler, architecture] |
| 6 | +--- |
| 7 | + |
| 8 | +We're removing all Solidity compiler (`solc`) dependencies and dropping the Yul backend from Ora. |
| 9 | +Instead, we're building a **community-driven, open intermediate representation (IR)** that is not tied to any single language or toolchain. |
| 10 | + |
| 11 | +<!-- truncate --> |
| 12 | + |
| 13 | +## Why We're Dropping Solc and Yul |
| 14 | + |
| 15 | +Ora originally used Solc to produce Yul and then emitted EVM bytecode from there. |
| 16 | +This was fine for bootstrapping, but it has now become a structural blocker. |
| 17 | + |
| 18 | +Here’s why: |
| 19 | + |
| 20 | +### 1. Solc locks us into its release cycle |
| 21 | +We can’t iterate faster than Solidity’s compiler does. Every update, feature, or bug fix drags in Solc's entire dependency chain. |
| 22 | + |
| 23 | +### 2. Build complexity is out of control |
| 24 | +Solc brings heavy C++ dependencies that slow down builds, CI pipelines, and contributor onboarding. |
| 25 | +Ora aims to be **fast, lightweight, and portable** — Solc is the opposite. |
| 26 | + |
| 27 | +### 3. Yul isn’t a good fit for Ora |
| 28 | +Yul is tightly coupled to Solidity’s semantics and memory model. |
| 29 | +Ora’s: |
| 30 | + |
| 31 | +- type system |
| 32 | +- control flow |
| 33 | +- memory regions |
| 34 | +- safety guarantees |
| 35 | +- verification model |
| 36 | + |
| 37 | +do **not** map cleanly to Yul. |
| 38 | +Every abstraction leak becomes a codegen hack. |
| 39 | + |
| 40 | +### 4. No room for innovation |
| 41 | +With Solc/Yul, language evolution is bottlenecked by someone else’s constraints. |
| 42 | +We want to: |
| 43 | + |
| 44 | +- design better IR passes, |
| 45 | +- explore new verification workflows, |
| 46 | +- target multiple VMs (EVM, eWASM, FuelVM, etc.), |
| 47 | +- and push compilation research forward. |
| 48 | + |
| 49 | +Yul doesn’t allow that. |
| 50 | + |
| 51 | +The old backend has been moved to `_targets_backup/` for reference, but it's no longer part of the build. |
| 52 | + |
| 53 | +--- |
| 54 | + |
| 55 | +## What We're Building Instead |
| 56 | + |
| 57 | +A **community open IR** designed for modern smart-contract languages. |
| 58 | + |
| 59 | +This IR: |
| 60 | + |
| 61 | +- **Is multi-language** — not specific to Ora or Solidity |
| 62 | +- **Is multi-backend** — EVM first, but not EVM-only |
| 63 | +- **Avoids legacy baggage** — no solc, no yul, no forced semantics |
| 64 | +- **Enables real innovation** — better optimizations, better safety, better analysis |
| 65 | +- **Has a clean implementation** — minimal dependencies, easy to extend |
| 66 | +- **Is open to the ecosystem** — other language developers can adopt it |
| 67 | + |
| 68 | +### Think of it as: |
| 69 | +A common low-level platform for smart contract compilers — the LLVM of Web3, but simpler and EVM-aware. |
| 70 | + |
| 71 | +--- |
| 72 | + |
| 73 | +## What This Means for Ora Users |
| 74 | + |
| 75 | +### ✔ Cleaner builds |
| 76 | +The project becomes dramatically easier to build and contribute to. |
| 77 | +No more C++ dependency chains. |
| 78 | + |
| 79 | +### ✔ Better optimizations |
| 80 | +A purpose-built IR means we can implement optimizations that were impossible in Yul. |
| 81 | + |
| 82 | +### ✔ Faster iteration |
| 83 | +We control our pipeline top to bottom — no external release cycles. |
| 84 | + |
| 85 | +### ✔ Long-term stability |
| 86 | +We’re no longer tied to the internal design decisions of another language. |
| 87 | + |
| 88 | +--- |
| 89 | + |
| 90 | +## What This Means for the Community |
| 91 | + |
| 92 | +### ✔ Open compiler infrastructure |
| 93 | +Anyone can build on this IR — new languages, research projects, and experimental runtimes. |
| 94 | + |
| 95 | +### ✔ A possible standard |
| 96 | +This can become the de-facto IR for next-generation EVM languages. |
| 97 | + |
| 98 | +### ✔ A platform for innovation |
| 99 | +We eliminate the “Solidity monopoly” on compiler infrastructure. |
| 100 | +If the community wants to build something better than Yul, this is it. |
| 101 | + |
| 102 | +--- |
| 103 | + |
| 104 | +## Technical Changes Already Done |
| 105 | + |
| 106 | +- Removed all Solc dependencies from `build.zig` |
| 107 | +- Deleted the Yul backend (preserved in `_targets_backup/`) |
| 108 | +- Cleaned up all MLIR bindings referencing Yul |
| 109 | +- Removed CLI flags that referenced Yul or Solc (`--target`, `--save-*`) |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## What’s Next |
| 114 | + |
| 115 | +We’re actively working on: |
| 116 | + |
| 117 | +- Designing the IR (with community feedback) |
| 118 | +- Implementing MLIR lowering into the new IR |
| 119 | +- Building the EVM codegen backend from scratch |
| 120 | +- Providing documentation so other languages can target the IR |
| 121 | + |
| 122 | +The compiler still supports everything up to code generation: |
| 123 | +- lexing |
| 124 | +- parsing |
| 125 | +- type checking |
| 126 | +- semantic analysis |
| 127 | +- MLIR generation |
| 128 | + |
| 129 | +Codegen will return once the new IR is stable. |
| 130 | + |
| 131 | +--- |
| 132 | + |
| 133 | +## Get Involved |
| 134 | + |
| 135 | +If you care about: |
| 136 | + |
| 137 | +- IR design |
| 138 | +- compiler pipelines |
| 139 | +- MLIR |
| 140 | +- verification |
| 141 | +- multi-language targets |
| 142 | +- building a new generation of low-level smart contract tooling |
| 143 | + |
| 144 | +The repo is open. |
| 145 | +This is not an Ora-only initiative — it’s a community IR project. |
| 146 | + |
| 147 | +Let’s build open, reusable compiler infrastructure for Web3 instead of inheriting the limitations of the past. |
| 148 | + |
| 149 | +--- |
0 commit comments