# ruby/ruby: what the language repository actually contains

> The canonical source tree for the Ruby programming language, including its C core and the Rust-based YJIT and ZJIT just-in-time compilers. It is a language implementation to build from source, not an application to install and run.

**ruby/ruby** — The Ruby Programming Language

- Repository: https://github.com/ruby/ruby
- Website: https://www.ruby-lang.org/
- Stars: 23,763 · Forks: 5,652
- Language: Ruby
- License: NOASSERTION
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/ruby-ruby

## What ruby/ruby is, and who actually needs it

This is the upstream source tree for the Ruby programming language, described in the README as "an interpreted object-oriented programming language often used for web development" that also handles plain text, serialized files and system tasks. The distinction that matters: this repository is the implementation, not a library you add to a project. If you write Ruby applications, you want a packaged interpreter, and the README sends you to https://www.ruby-lang.org/en/downloads/ for that. The audience here is narrower. People who patch the interpreter, add or fix C extensions in core, work on the parser and bytecode compiler, or need to build Ruby for a platform where no package exists. The repository carries the C sources directly at the top level (array.c, compile.c, cont.c, dir.c and many more), the build system in configure.ac and common.mk, and a benchmark/ and bootstraptest/ directory for measuring and checking the interpreter itself. It also carries sample/ scripts such as sample/fib.rb and sample/all-ruby-quine.rb, which are demonstrations of the language rather than part of the build.

## The C core and the Rust JIT layer sit in one tree

The unusual structural fact about this repository is that it is a C project with a Rust workspace bolted into the same checkout. The root Cargo.toml defines a workspace with three members: zjit, yjit and jit. Its header comment explains why they are combined: "Rust tooling limitations means all Rust code need to share a single archive library (staticlib) at the integration point with non-rust code." The crate type is declared as staticlib and the package is marked publish = false, so none of this is meant for crates.io. The manifest also states a policy worth reading before you touch it: "Do not add required dependencies." Optional dependencies are described as development-only, and the comment notes that release builds avoid Cargo entirely because offline builds can fail. That is a deliberate constraint on how the JIT code can evolve, and it means a contribution that pulls in a new mandatory crate is unlikely to be accepted as-is. Two features gate the compilers at build time: yjit = ["dep:yjit"] and zjit = ["dep:zjit"], with disasm and runtime_checks features forwarding into both. The declared rust-version is 1.85.0 and the edition is 2024.

## Getting the source and producing a working ruby

The README gives the clone command directly. There is no install step in the README itself; it points to a separate contributing document for building. The clone is the only command the README spells out, so start there and expect the build instructions to come from the linked page.

## Checking out a specific release instead of master

If you want a tagged version rather than the moving default branch, the repository publishes releases such as v4.0.7 (4.0.7) and v3_3_12 (3.3.12). The README also mentions that other development branches exist and gives a command to list them, which is useful before you assume a branch name. The README states you can download release packages and a snapshot of the repository, and directs whole-version downloads to the releases page on ruby-lang.org.

## The build is the hard part, and the README does not carry it

This is the first real limitation. The README's "How to build" section is a single link to Building Ruby in the contributing docs. Everything an operator would want to know, the configure flags, the dependencies, whether to enable YJIT, is one hop away and not in the repository's front page. The Cargo.toml adds a second constraint that the README never mentions: if you want the Rust JIT components, you need rustc 1.85.0 or newer and edition 2024 support. A toolchain older than that will not build the workspace, and the failure will look like a Cargo error rather than a Ruby one. There is also a note in the manifest that the dev profile uses opt-level = 1 rather than 0, because at 0 "functions use so much stack space that we get stray SystemStackError s". That is a debugging hazard: if you lower the optimization level yourself to get cleaner traces, you may start seeing stack errors that are artifacts of your build settings, not bugs in your code. Finally, the README does not document rollback or how to switch back to a previously built interpreter, so plan your install prefix accordingly.

## When you should use a packaged Ruby instead

The practical alternative is a distribution-packaged or version-managed Ruby, and the README names the category without picking a winner: "For a complete list of ways to install Ruby, including using third-party tools like rvm, see" the downloads page. The difference in approach is stark. A version manager installs a prebuilt or quickly built interpreter per project and lets you switch between versions with a shell hook. Building from this repository gives you one interpreter at a chosen prefix, compiled with the flags you pass to configure, and it is the only way to test a change to the interpreter itself. If your goal is to run a Rails application, the source tree gives you nothing that a packaged Ruby does not, and it costs you a compiler toolchain, build time, and the maintenance of rebuilding when you want an update. The repository is also where bug reports land: the README directs bugs to https://bugs.ruby-lang.org and questions to the Ruby-Talk mailing list, with the subscription instruction being to send the word "join" in the mail subject to ruby-talk-request@ml.ruby-lang.org.

## Licence and the cost of staying current

The repository metadata reports the licence as NOASSERTION, and the README does not resolve that: it says only "See the file COPYING". The top-level entries include COPYING, COPYING.ja, LEGAL, GPL and BSDL, which indicates the terms are distributed across more than one file and that the Japanese translation is kept alongside the English one. Read those files rather than assuming a single identifier applies; this is not a place where a one-word licence label is safe to rely on. On maintenance, the last push to the default branch was on 2026-09-20, and the most recent release listed is v4.0.7 from 2026-09-15. That cadence is real, but it cuts both ways for anyone tracking the source: the default branch moves, releases are tagged frequently, and there is no stated upgrade path in the README for someone who built from a snapshot. If you build from a commit rather than a tag, record the commit hash yourself, because the repository does not do it for you.

## Conclusion

Adopt this repository if you are patching the interpreter, testing a change against the C core, or building Ruby from source for a platform without a packaged release. Do not adopt it if you want to write Ruby applications; the README points to ruby-lang.org/en/downloads for that, and the build instructions live in the contributing docs rather than here. Before you spend time on a build, check the COPYING and LEGAL files to confirm the terms you are accepting, and confirm your rustc is at least 1.85.0 if you intend to enable YJIT or ZJIT, because the Cargo manifest declares that as the minimum.

## FAQ

### Is ruby/ruby the same thing as Ruby on Rails?

No. This repository is the Ruby programming language itself, described in the README as an interpreted object-oriented language often used for web development. Ruby on Rails is a separate web framework built on top of the language.

### What is the difference between ruby/ruby and other Ruby implementations?

The README does not compare this implementation with others. It describes Ruby's own features, such as mix-ins, singleton methods, operator overloading, exception handling, iterators and closures, garbage collection, and dynamic loading of object files on some architectures.

### How do I get the ruby/ruby source code?

The README gives the clone command for the mirror of the Ruby source tree, and notes that release packages and a snapshot of the repository can also be downloaded. Whole-version downloads are directed to the releases page on ruby-lang.org.

### Does ruby/ruby require Rust to build?

Only the JIT components do. The root Cargo.toml declares a workspace containing zjit, yjit and jit, with rust-version 1.85.0 and edition 2024, and the yjit and zjit features are optional dependencies. The manifest also notes that release builds avoid Cargo entirely.

### Where do I report a bug in ruby/ruby?

The README directs bugs to https://bugs.ruby-lang.org and points to the Reporting Issues document in the contributing docs for more information. Questions about the language go to the Ruby-Talk mailing list or to sites like Stack Overflow.

## Sources

- [Issues](https://github.com/ruby/ruby/issues)
- [Project website](https://www.ruby-lang.org/)
- [README](https://github.com/ruby/ruby/blob/master/README.md)
- [Releases](https://github.com/ruby/ruby/releases)
- [ruby/ruby on GitHub](https://github.com/ruby/ruby)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/ruby-ruby
