The Rust 2026 edition isn't being designed in a vacuum. It's being designed in the Linux kernel.

Field projections and in-place initialization β€” two of the flagship features planned for 2026 β€” exist because Rust needs to work inside a piece of software that runs on billions of devices. The kernel doesn't care about ergonomic async iteration. It cares about memory layout, stack usage, and pinned pointers. That's exactly what these features solve.

The Problem Field Projections Solve

If you've ever tried to access a field through a Pin<&mut T> or MaybeUninit<T>, you've hit the wall. The compiler sees the wrapper, not the field. You end up with unsafe code just to get a pointer to a struct's second field.

// Current workaround: manual pointer math
struct Packet {
    header: Header,
    payload: [u8; 1024],
}

let mut packet = Pin::new(&mut pkt);
let payload_ptr: *mut [u8; 1024] = unsafe {
    (packet.get_unchecked_mut() as *mut Packet).add(0) as *mut [u8; 1024]
};

Field projections would let the compiler understand that Pin<&mut Packet> can project to Pin<&mut Packet::payload> β€” safely, with zero unsafe code. The compiler already knows the memory layout. It just needs a way to express the projection.

In-Place Initialization: No More Stack Copies

The second big feature is in-place initialization. Right now, if you have a large struct on the heap and want to initialize it field by field, Rust moves it onto the stack first. For most code, this is fine. For kernel code, it's a dealbreaker β€” the stack is precious, and many kernel types can't be moved once constructed (they're pinned).

In-place initialization means the bits land directly where they belong, never touching the caller's stack frame.

Why This Matters Outside the Kernel

You don't write kernel drivers. But you might write:

The same constraints that drive Rust-for-Linux eventually leak into your code. The 2026 edition isζε‰ζ³„ιœ² (pre-leaking) those solutions.

Async Closures: Already Here

The one 2026 feature you can already use: async closures landed in Rust 1.85 (February 2025). They're not waiting for 2026.

let fetch_data = async || {
    client.get("https://api.example.com/data").await
};

That's it. That works now. The async Rust experience is converging toward sync Rust ergonomics β€” closures that capture, await that just works.

What's Coming Next

The 2026 roadmap also includes:

But the headline is clear: Rust 2026 is being shaped by systems programming constraints, not web service ergonomics. That's a good thing. The features that matter for the kernel matter for anyone pushing the language to its limits.


Field projections and in-place initialization are how Rust earns the right to run everywhere. The question isn't whether Rust belongs in the kernel β€” it's what else these features unlock.