<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Ferro</title>
    <subtitle>Production-grade Rust-native rewrites of JVM&#x2F;Python data infrastructure.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://ferro.abyo.net/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://ferro.abyo.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-26T00:00:00+00:00</updated>
    <id>https://ferro.abyo.net/atom.xml</id>
    <entry xml:lang="en">
        <title>Building Ferro: rewriting the JVM and Python data stack in Rust as a solo developer</title>
        <published>2026-04-26T00:00:00+00:00</published>
        <updated>2026-04-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Youichi Uda
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://ferro.abyo.net/blog/building-ferro/"/>
        <id>https://ferro.abyo.net/blog/building-ferro/</id>
        
        <content type="html" xml:base="https://ferro.abyo.net/blog/building-ferro/">&lt;p&gt;I’ve spent the last several months writing Rust. The output is what
I’m going to call “Ferro”: a set of Rust-native rewrites of the
JVM and Python data infrastructure most teams take for granted —
search, streaming, orchestration, identity, package registries,
log shipping, monitoring. There are seven product repositories now,
on the order of 800,000 lines of own-code Rust, around 18,000 tests.
I am a single developer.&lt;&#x2F;p&gt;
&lt;p&gt;This post is about &lt;em&gt;why&lt;&#x2F;em&gt; and &lt;em&gt;how&lt;&#x2F;em&gt;. It is also the public-launch
post for &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;youichi-uda&#x2F;ferro-protocols&quot;&gt;&lt;code&gt;ferro-protocols&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; — the first public-facing piece
of that work. &lt;code&gt;ferro-protocols&lt;&#x2F;code&gt; is a workspace of small, narrowly
scoped crates carved out of the larger ecosystem and published
under Apache-2.0, so the parts of the work that have value
independent of the products themselves can ship to crates.io and
be used by anyone.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-rewrite-all-of-it&quot;&gt;Why rewrite all of it&lt;&#x2F;h2&gt;
&lt;p&gt;Most of the JVM data stack — Elasticsearch, Kafka, Logstash,
Metricbeat, Filebeat — was designed in an era where a JVM-resident
service with a 4 GB heap and a 60-second GC pause window was the
acceptable cost of doing business. The Python data stack — Airflow,
the SDK ecosystem around it — was designed when “spawn a CPython
worker per task” was a reasonable scheduling primitive.&lt;&#x2F;p&gt;
&lt;p&gt;It is no longer the right answer for most installations. Cold-start
matters. Memory matters. P99 latency matters. Container density
matters. The Datadog-shaped vendors are pricing on agent footprint
because that’s where the squeeze is. A 30 MB resident-set, single-binary
Rust replacement of Filebeat ships on every container in a fleet
without making the bill irrational; a 200 MB JVM does not.&lt;&#x2F;p&gt;
&lt;p&gt;Rust has been ready for this rewrite for a couple of years now. The
async story is solid (Tokio is mature, rustls is mature, openraft
exists, sqlx works). The ecosystem has stabilised on permissive
licensing. &lt;code&gt;cargo&lt;&#x2F;code&gt; makes producing a static binary trivial. What’s
been missing is &lt;em&gt;people doing the work&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I started doing the work.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-s-in-the-ecosystem-today&quot;&gt;What’s in the ecosystem today&lt;&#x2F;h2&gt;
&lt;p&gt;Concretely, by individual product:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Product&lt;&#x2F;th&gt;&lt;th&gt;Compat target&lt;&#x2F;th&gt;&lt;th&gt;Status as of 2026-04-26&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroSearch&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Elasticsearch 9.3 &#x2F; OpenSearch 2.19 + 3.6 &#x2F; OpenSearch Dashboards 3.6&lt;&#x2F;td&gt;&lt;td&gt;YAML REST 100% on ES, 100% on OS 2.19, 100% on OS 3.6, 100% on OSD 3.6 api_integration, plus 92% on Kibana 9.3 in Docker mode. Single Rust engine.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroStream&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Kafka 4.2 wire&lt;&#x2F;td&gt;&lt;td&gt;Brokers, KRaft, Tiered Storage, Share Groups (KIP-932), Streams API surface, OMB benchmarking harness. Performance has caught up with Redpanda on consume in the synthetic suites; the more-complex multi-topic OMB workloads are still being root-caused.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroFlow&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;TPC-H + Kafka SQL connectors&lt;&#x2F;td&gt;&lt;td&gt;TPC-H 22&#x2F;22, ~275 compat tests, six real connectors (sink&#x2F;source&#x2F;TLS&#x2F;SASL&#x2F;S3&#x2F;GCS&#x2F;partition&#x2F;LSM).&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroAuth&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Keycloak 26 IdP wire&lt;&#x2F;td&gt;&lt;td&gt;Runnable IdP with WebAuthn L3, mTLS, LDAP sync, HA stores. Passkey-issuance live smoke pass.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroRepo&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;OCI Distribution v1.1 + Cargo + Maven + PyPI + Helm + Go modules + APT&#x2F;YUM, with Sigstore + SLSA + TUF&lt;&#x2F;td&gt;&lt;td&gt;v0.1.0 GA tag local, 1391 tests pass, OCI conformance suite green.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroAir&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Apache Airflow 3&lt;&#x2F;td&gt;&lt;td&gt;Phase 0 done — PyO3 + airflow.sdk integration proven, AIP-72 stub, 100% parser parity on a 64-DAG sample.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;FerroBeat &#x2F; FerroHeartbeat &#x2F; FerroMetric &#x2F; FerroStash&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Filebeat &#x2F; Heartbeat &#x2F; Metricbeat &#x2F; Logstash&lt;&#x2F;td&gt;&lt;td&gt;All running. FerroMetric reaches a Linux 9.5 MB RSS at 50K events&#x2F;s (compared with ~31 MB for FerroBeat and a multi-hundred-MB JVM baseline for the originals).&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;This is “the largest single-developer rewrite of a major data
infrastructure category I can find,” but I want to be careful not
to over-claim. Plenty of those numbers come from synthetic test
suites; benchmarks against production-shaped workloads are an
ongoing, partially-finished exercise (the OMB hang I mentioned
above is a real, current bug — a non-daemon
&lt;code&gt;ScheduledThreadPoolExecutor&lt;&#x2F;code&gt; in the OMB Java client side that
prevents JVM exit, fixed in the harness but not yet re-run on EC2).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-shape-of-the-work&quot;&gt;The shape of the work&lt;&#x2F;h2&gt;
&lt;p&gt;Each Ferro product is a Rust workspace of dozens of crates. Most of
them are private monorepos. They share a few common rules:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;forbid(unsafe_code)&lt;&#x2F;code&gt; workspace-wide. Exceptions need a &lt;code&gt;SAFETY:&lt;&#x2F;code&gt;
comment and live under feature flags (&lt;code&gt;py-embed&lt;&#x2F;code&gt; in FerroAir is the
one current case, for the PyO3 boundary).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cargo clippy --all-targets -- -D warnings&lt;&#x2F;code&gt; with pedantic
elevated to &lt;code&gt;warn&lt;&#x2F;code&gt;. No exceptions.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;cargo deny check&lt;&#x2F;code&gt; clean. License allowlist (Apache-2.0, MIT, BSD
family, ISC, MPL-2.0, etc.). &lt;code&gt;openssl&lt;&#x2F;code&gt;, &lt;code&gt;openssl-sys&lt;&#x2F;code&gt;, &lt;code&gt;native-tls&lt;&#x2F;code&gt;
blocked — we use rustls everywhere.&lt;&#x2F;li&gt;
&lt;li&gt;80%+ line coverage target. Some products are well above
(FerroBeat 87.6%, FerroMetric 86.4%); the cap is set by what’s
measurable in a realistic CI tier.&lt;&#x2F;li&gt;
&lt;li&gt;Zero &lt;code&gt;unwrap&lt;&#x2F;code&gt; on user-controlled paths. Zero &lt;code&gt;TODO&lt;&#x2F;code&gt; &#x2F;
&lt;code&gt;FIXME&lt;&#x2F;code&gt; &#x2F; &lt;code&gt;HACK&lt;&#x2F;code&gt; in source.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;These rules are non-negotiable in any of the seven repos. The
result is that when I extract a module into a public crate (more
on that in a moment), I do not have to spend time tightening it up
to OSS quality — it already meets that bar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;diligence-i-run-myself-through-synthetic-dd-rounds&quot;&gt;Diligence: I run myself through synthetic DD rounds&lt;&#x2F;h2&gt;
&lt;p&gt;The work is not just code. Every Ferro product has a &lt;code&gt;due-diligence&#x2F;&lt;&#x2F;code&gt;
directory with round-by-round findings logs from synthetic
investor-style audits. I run these through Codex CLI (with GPT-5
class models) and Anthropic Claude in parallel — same brief, two
adversaries — and merge the findings. They go through identification
(“R1 surfaced 54 actionable findings”), then remediation rounds
(“R2 closed 38 of those, surfaced 16 new ones, …”) until the
remediation backlog stabilises.&lt;&#x2F;p&gt;
&lt;p&gt;For perspective: FerroMetric reached &lt;strong&gt;R14 Clean Pass&lt;&#x2F;strong&gt; with 0
actionable findings remaining. FerroAuth is at R14 with 4 medium &#x2F;
3 low &#x2F; 1 info open. The findings logs are commit-pinned, so
“this round happened” is auditable, and the fixes are commit-pinned,
so “this finding was closed by &lt;em&gt;this commit&lt;&#x2F;em&gt;” is auditable.&lt;&#x2F;p&gt;
&lt;p&gt;This is the part I want potential acquirers and partners to look
at — not a list of features. The features are easy to claim. What’s
hard is showing the work &lt;em&gt;behind&lt;&#x2F;em&gt; them.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-first-public-release-ferro-protocols&quot;&gt;The first public release: ferro-protocols&lt;&#x2F;h2&gt;
&lt;p&gt;The publicly-published part of all of this starts with
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;youichi-uda&#x2F;ferro-protocols&quot;&gt;&lt;code&gt;ferro-protocols&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; — a mono-repo workspace whose individual
crates are extracted from the products above. The first two crates
in the repo are:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ferro-lumberjack-v0-1-0&quot;&gt;&lt;code&gt;ferro-lumberjack&lt;&#x2F;code&gt; (v0.1.0)&lt;&#x2F;h3&gt;
&lt;p&gt;The Logstash Lumberjack v2 wire protocol. Filebeat and Heartbeat
agents speak it. Logstash receives it. Until now, no Rust crate
implemented either side.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;ferro-lumberjack&lt;&#x2F;code&gt; is the &lt;strong&gt;frame codec, async client, and async
server&lt;&#x2F;strong&gt; for Lumberjack v2, with TLS in both directions via
rustls. The frame codec is pure-data (no I&#x2F;O, usable from any
runtime); the client + server are Tokio-only. There are 66 tests
including 6 real-socket end-to-end client↔server tests with
self-signed TLS.&lt;&#x2F;p&gt;
&lt;p&gt;It is at &lt;code&gt;v0.1.0&lt;&#x2F;code&gt; because the implementation is extracted from
production use in FerroBeat and FerroHeartbeat — not new code.
The server side is fresh, but exercised by real client↔server
e2e tests.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;ferro-lumberjack&quot;&gt;ferro-lumberjack on crates.io&lt;&#x2F;a&gt;
· &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;ferro-lumberjack&quot;&gt;docs.rs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ferro-airflow-dag-parser-v0-0-1&quot;&gt;&lt;code&gt;ferro-airflow-dag-parser&lt;&#x2F;code&gt; (v0.0.1)&lt;&#x2F;h3&gt;
&lt;p&gt;A static AST-based extractor for Apache Airflow™ Python DAG
files. Recovers &lt;code&gt;dag_id&lt;&#x2F;code&gt;, &lt;code&gt;task_ids&lt;&#x2F;code&gt;, dependencies, schedule, and
seven categories of dynamic-fallback markers — without running
the source.&lt;&#x2F;p&gt;
&lt;p&gt;This is a primitive that, as far as I can tell, &lt;strong&gt;does not exist
elsewhere in any language&lt;&#x2F;strong&gt;. Apache Airflow’s reference scheduler
imports every &lt;code&gt;dags&#x2F;*.py&lt;&#x2F;code&gt; through CPython on every poll cycle,
which is fine for small fleets and a heavy tax on big ones.
FerroAir uses this crate as a fast-path that handles the static
fraction of DAGs in microseconds, and only routes to CPython the
ones whose structure depends on runtime state.&lt;&#x2F;p&gt;
&lt;p&gt;The crate is in alpha (&lt;code&gt;v0.0.x&lt;&#x2F;code&gt;) because the public API surface
is still shaping; the implementation has 75 tests and ships with
a &lt;code&gt;panic_safe&lt;&#x2F;code&gt; shim that catches upstream parser panics found by
fuzz testing — the kind of pre-publish hardening that turns a
discovered bug into a regression test instead of a production
crash.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;ferro-airflow-dag-parser&quot;&gt;ferro-airflow-dag-parser on crates.io&lt;&#x2F;a&gt;
· &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;ferro-airflow-dag-parser&quot;&gt;docs.rs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-roadmap-yes-it-includes-all-of-the-above&quot;&gt;The roadmap (yes, it includes “all of the above”)&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;ferro-protocols&lt;&#x2F;code&gt; is a mono-repo on purpose. As each product
matures past the “hardening behind closed doors” stage, the parts
that have value as standalone crates will surface here. Already
planned for the next several weeks, in rough order:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ferro-cargo-registry-server&lt;&#x2F;code&gt; — Cargo Alternative Registry server-side
(sparse + git index; first public Rust crate to do this).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-maven-layout&lt;&#x2F;code&gt; — Maven Repository Layout 2.0 (no Rust
implementation exists yet).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-oci-server&lt;&#x2F;code&gt; — OCI Distribution Specification v1.1
server-side primitives (clients exist; servers do not).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-painless&lt;&#x2F;code&gt; — Elasticsearch Painless lexer&#x2F;parser&#x2F;JIT
(extracted from FerroStash).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-esql-parser&lt;&#x2F;code&gt; — ES|QL parser (the Elasticsearch query
language; absent from the Rust ecosystem).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-aql-parser&lt;&#x2F;code&gt; — Artifactory AQL.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-pep503-pep691&lt;&#x2F;code&gt; — PyPI primitives.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-go-module-proxy&lt;&#x2F;code&gt; — Go module proxy server-side.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-helm-chart-repo&lt;&#x2F;code&gt; — Helm 3 chart repository primitives.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-keycloak-realm-import&lt;&#x2F;code&gt; — Keycloak realm JSON 26.x.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ferro-logstash-dsl-parser&lt;&#x2F;code&gt; — Logstash &lt;code&gt;.conf&lt;&#x2F;code&gt; DSL.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;All Apache-2.0. All extracted from production use (or to be
production-tested in their parent product first). All published
under a Developer Certificate of Origin contributor flow — no CLA
— so contributing is friction-free.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-i-am-not-claiming&quot;&gt;What I am not claiming&lt;&#x2F;h2&gt;
&lt;p&gt;A tactical list of things that are still open:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;An acquisition track for FerroStream and adjacent products is
open but not closed.&lt;&#x2F;strong&gt; FerroStream is the part of this work
intended for sale to a strategic buyer; conversations exist but
nothing has signed.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;OMB benchmarks against real cloud are not yet public.&lt;&#x2F;strong&gt;
Synthetic benches show parity-or-better; the real EC2 13-hour
workload run with the harness fixes is queued, not done.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;FerroAir Phase 1 is not done.&lt;&#x2F;strong&gt; Phase 0 is a 4-pillar PoC
with 100% parser parity over a 64-DAG sample. The full Airflow
3.x compat surface is Phase 1 work.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Marketplace listings (FerroAuth Pro, FerroRepo Pro, FerroAir
Pro) are pending company formation.&lt;&#x2F;strong&gt; They are intentionally
gated on the Track A close — premature commercial launch under
personal-name billing is the wrong move.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;I am not going to claim this is all “production-ready” for
your environment.&lt;&#x2F;strong&gt; It is production-tested in mine. Yours
may be different.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The diligence rounds, the test counts, and the per-product
README files are the load-bearing artefacts. Look at those, not
at marketing copy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-to-actually-use-it&quot;&gt;How to actually use it&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;dependencies&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;ferro-lumberjack&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;0.1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;ferro-airflow-dag-parser&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;ferro-protocols&lt;&#x2F;code&gt; repo has the canonical READMEs, contribution
flow (DCO), security policy, and the workflow files used by CI.
Issues + PRs welcome on the repo. Discussions are a better channel
for design questions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-i-m-publishing-now&quot;&gt;Why I’m publishing now&lt;&#x2F;h2&gt;
&lt;p&gt;A single-developer ecosystem rewrite of this scale is unusual
enough that the natural skeptical question is &lt;strong&gt;“how is this real?”&lt;&#x2F;strong&gt;
The answer is to put the parts that &lt;em&gt;can&lt;&#x2F;em&gt; be published into the
open, on terms (Apache-2.0, DCO, on crates.io with semver) that
make them easy to inspect, depend on, and contribute to. Acquirers
will look at the repo. Hiring managers will look at the repo. Other
Rust-data-infrastructure people will look at the repo. The way to
make the work falsifiable is to ship.&lt;&#x2F;p&gt;
&lt;p&gt;If you are working on Airflow internals and need a static DAG
parser, or you operate Logstash and need a Beats sender or
receiver in Rust, you can install both crates today.&lt;&#x2F;p&gt;
&lt;p&gt;The rest of the ecosystem will surface here as it matures.&lt;&#x2F;p&gt;
&lt;p&gt;— Y.U.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
