Skip to content

milankinen/lold

Repository files navigation

lold — Low Overhead Linker for Development

A partially ld-compatible incremental linker executable and daemon for developing Rust applications on macOS and Linux.

Unlike traditional linkers that run as standalone executables, lold is a daemon process that exposes an IPC server, stays online between link invocations, keeps project state in memory, and incrementally applies only the changed object and library files to the resulting binary.

lold is not a general-purpose linker — it targets only Rust linker needs and development-time incremental linking. For production builds, use another linker.

Goals

  • The lold binary is a thin facade that delegates linking work to an IPC daemon server, caching as much state as possible between subsequent builds.
  • Data structures and algorithms are designed for the fastest possible delta/incremental changes; initial linking time may be slower in order to build proper indexes for subsequent updates.
  • Advanced lifetime annotations to minimize memory copies.
  • High-performance crates for common data structures and algorithms where applicable: e.g. fast (non-cryptographic) hashes, inlineable strings instead of standard strings for small tokens, etc.

Non-Goals

  • Smallest or most optimal binaries: lold trades binary size for faster increments. Sections may be over-provisioned and padded (e.g. 125%) to allow inline rewrites on content changes, preventing full relocation.
  • Full ld compatibility: lold implements only the subset of GNU ld functionality needed to support common Rust project compilation.
  • Windows support: only macOS and Linux are supported.

Status

See docs/FINDINGS.md for decision rationale and findings, and docs/BACKLOG.md for remaining work items.

About

Incremental linker for development

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors