SYSTEM Cited by 1 source
FXL (Facebook's predecessor in-house policy DSL)¶
What it was¶
FXL was an in-house Facebook domain-specific language used for writing anti-abuse policies on Sigma prior to the 2013–2015 migration to Haskell. The name traces to an earlier Facebook Engineering Notes post, Fighting spam with pure functions.
Why it was retired¶
The canonical reasoning is given in Simon Marlow's 2015 post:
The original language we designed for writing policies, FXL, was not ideal for expressing the growing scale and complexity of Facebook policies. It lacked certain abstraction facilities, such as user-defined data types and modules, and its implementation, based on an interpreter, was slower than we wanted. We wanted the performance and expressivity of a fully fledged programming language. Thus, we decided to migrate to an existing language rather than try to improve FXL.
(sources/2015-06-26-meta-fighting-spam-with-haskell)
Two things killed FXL:
- Expressivity cap. No user-defined data types, no modules. Growing policy complexity couldn't be expressed cleanly.
- Interpreter performance cap. FXL was interpreted. Performance-critical logic had to be written in C++ and added to Sigma itself — which made rolling out perf-sensitive policy changes slower (C++ deploys ≠ policy deploys).
Why this page exists¶
FXL is on the wiki as the canonical cautionary in-house-DSL datum. It was a reasonable early design ("pure functions" even in the old Notes title), and it ran Meta's anti-abuse rule engine for years. It was retired when complexity growth outran its expressivity budget and interpreter performance capped hardware utilisation — both conditions together. Either alone might have been survivable (compile the interpreter; extend the language with module support); the combination meant Meta chose migration to an existing language over evolution of the in-house one.
This pairs on the wiki with Meta's five Haskell-selection criteria (see systems/haskell + systems/sigma-meta): each of the five criteria is a direct response to a concrete FXL failure mode.
Current status¶
Retired. No further public disclosure.
Seen in¶
Related¶
- systems/sigma-meta — the rule engine FXL ran on, then Haskell.
- systems/haskell — its replacement.
- companies/meta