Linuxbrew/legacy-linuxbrew
:skull: This repository is defunct, because it has been split into https://github.com/Linuxbrew/brew and https://github.com/Linuxbrew/homebrew-core
Stale — last commit 9y ago
worst of 4 axesnon-standard license (Other); last commit was 9y ago…
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓34+ active contributors
- ✓Distributed ownership (top contributor 26% of recent commits)
- ✓Other licensed
Show 4 more →Show less
- ✓CI configured
- ⚠Stale — last commit 9y ago
- ⚠Non-standard license (Other) — review terms
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: clarify license terms
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/linuxbrew/legacy-linuxbrew)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/linuxbrew/legacy-linuxbrew on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: Linuxbrew/legacy-linuxbrew
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/Linuxbrew/legacy-linuxbrew shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 9y ago
- 34+ active contributors
- Distributed ownership (top contributor 26% of recent commits)
- Other licensed
- CI configured
- ⚠ Stale — last commit 9y ago
- ⚠ Non-standard license (Other) — review terms
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live Linuxbrew/legacy-linuxbrew
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/Linuxbrew/legacy-linuxbrew.
What it runs against: a local clone of Linuxbrew/legacy-linuxbrew — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in Linuxbrew/legacy-linuxbrew | Confirms the artifact applies here, not a fork |
| 2 | License is still Other | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | Last commit ≤ 3176 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of Linuxbrew/legacy-linuxbrew. If you don't
# have one yet, run these first:
#
# git clone https://github.com/Linuxbrew/legacy-linuxbrew.git
# cd legacy-linuxbrew
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of Linuxbrew/legacy-linuxbrew and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "Linuxbrew/legacy-linuxbrew(\\.git)?\\b" \\
&& ok "origin remote is Linuxbrew/legacy-linuxbrew" \\
|| miss "origin remote is not Linuxbrew/legacy-linuxbrew (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
&& ok "license is Other" \\
|| miss "license drift — was Other at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 3176 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~3146d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/Linuxbrew/legacy-linuxbrew"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Linuxbrew is a package manager for Linux that ports Homebrew's formula-based package management system from macOS to Linux. It was split into two repositories: Linuxbrew/brew contains the package manager core, while Linuxbrew/homebrew-core contains the actual formula definitions (stored in Library/Formula). This repository is now deprecated and archived—users should migrate to the split repositories. Monolithic single-repository structure: Library/Aliases/ contains formula name mappings; Library/Formula/ (not shown in snippet but referenced in README) contains actual package definitions in Ruby; root-level configuration includes .rubocop.yml (Ruby linting), Dockerfile for containerized Linuxbrew, and CI via .travis.yml. The repo predates the split and is no longer actively shaped.
👥Who it's for
Linux developers and system administrators who want Homebrew-like package management on Linux without sudo, typically preferring user-space package installation. Contributors maintaining package formulas and the package manager infrastructure.
🌱Maturity & risk
This repository is abandoned and deprecated (declared defunct in README, split into two repos). The monolithic structure predates modern Linuxbrew. It served as a stable, production-ready package manager before the 2021 split, but no new development occurs here—all work moved to Linuxbrew/brew and Linuxbrew/homebrew-core.
Critical risk: This is an archived, defunct repository. No migration path exists; users must manually switch to the split repositories. The .travis.yml CI configuration is outdated (Travis CI is deprecated). The codebase mixes formula definitions with core tooling, making it unmaintainable. Do not use this repo for new work.
Active areas of work
Nothing. This repository is frozen and defunct. Active development migrated to https://github.com/Linuxbrew/brew (package manager) and https://github.com/Linuxbrew/homebrew-core (formulae). The README explicitly directs all users and contributors to those two repositories instead.
🚀Get running
Do not clone this repository. Instead, follow the official migration: (1) git clone https://github.com/Linuxbrew/brew.git for the package manager, (2) git clone https://github.com/Linuxbrew/homebrew-core.git for formulas. Install via brew install linuxbrew-wrapper or follow Linuxbrew/brew's README.
Daily commands: This repository cannot be run standalone—it is defunct. To use Linuxbrew, clone Linuxbrew/brew and follow its setup instructions. The .travis.yml indicates CI ran tests via Ruby, but this is not operational.
🗺️Map of the codebase
- README.md: Declares the repository defunct and directs all users to Linuxbrew/brew and Linuxbrew/homebrew-core
- .github/CONTRIBUTING.md: Documents contribution guidelines (now outdated, but references how package contributions worked)
- Library/Aliases/: Contains formula name aliases/mappings for backward compatibility (e.g., 'golang' → 'go')
- Dockerfile: Provides containerized Linuxbrew environment, useful for understanding runtime dependencies
- .rubocop.yml: Ruby linting rules for formula code style (applies to how formulas were written)
🛠️How to make changes
Do not modify this repository. For bug fixes or new features: (1) Formula additions → Linuxbrew/homebrew-core; (2) Core package manager changes → Linuxbrew/brew. The split was designed to separate concerns. If you have legacy patches, port them to the appropriate split repository.
🪤Traps & gotchas
This repository is non-functional as a development target. Cloning it will not give you a working package manager—the core and formulas are in separate repos now. The .travis.yml references Travis CI, which is deprecated. The CONTRIBUTING guidelines and issue templates are archived and no longer monitored. Do not attempt to submit pull requests here.
💡Concepts to learn
- Homebrew Formula — The core abstraction for defining installable packages in Linuxbrew; stored as Ruby DSL files, each formula describes how to download, build, and install a package
- Package Aliases — Linuxbrew uses aliases (in Library/Aliases/) to provide friendly names for packages, allowing users to install with common names (e.g., 'golang' instead of 'go-lang')
- Monorepo vs. Multi-Repo Architecture — This repository exemplifies why monorepos can become unmaintainable; the split into Linuxbrew/brew and Linuxbrew/homebrew-core demonstrates the transition to a multi-repo architecture for better separation of concerns
- Ruby DSL (Domain-Specific Language) — Formulas are written in Ruby DSL, not raw Ruby; understanding how Homebrew metaprograms Ruby to create a formula syntax is essential for writing formulas
- User-Space Package Management — Linuxbrew installs packages to ~/.linuxbrew instead of /usr/local, avoiding sudo requirements; this changes how dependencies are resolved and environment variables configured
- Tap (Third-Party Formula Repository) — Linuxbrew supports 'taps'—external formula repositories that extend the core formula set; the split made homebrew-core a 'built-in tap' pattern
🔗Related repos
Linuxbrew/brew— The active, split-out package manager core for Linuxbrew; this is where you should use Linuxbrew from nowLinuxbrew/homebrew-core— The active, split-out formula repository; all package definitions now live here instead of in Library/FormulaHomebrew/brew— The original macOS Homebrew package manager that Linuxbrew ported; architectural inspiration and upstream projectHomebrew/homebrew-core— Original upstream formula repository for Homebrew; Linuxbrew/homebrew-core is a port/forkLinuxbrew/linuxbrew-core— Alternative historical reference; some users may reference this name for the formula repository
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Create a comprehensive deprecation notice and migration guide in .github/
While the README mentions the split into Linuxbrew/brew and Linuxbrew/homebrew-core, there's no structured migration guide for users or contributors. A detailed .github/MIGRATION.md would help direct users to the correct repositories and explain where specific formula/alias definitions now live. This reduces confusion and support burden.
- [ ] Create .github/MIGRATION.md with clear mapping of old paths to new repos
- [ ] Document how users should update their Linuxbrew installations
- [ ] Add instructions for finding specific formulae in homebrew-core
- [ ] Link to this guide from README.md prominently
- [ ] Reference the MIGRATION.md in .github/ISSUE_TEMPLATE.md to catch users filing issues in the wrong place
Add GitHub Actions workflow to automatically close and redirect issues/PRs
Since this is a defunct repository, new contributors and users will continue filing issues and PRs here out of habit. A GitHub Action workflow (in .github/workflows/) could automatically comment on new issues/PRs with a helpful redirect message pointing to the correct repository and then close them. This prevents maintainer overhead and improves user experience.
- [ ] Create .github/workflows/redirect-to-active-repos.yml using GitHub Actions
- [ ] Configure trigger on issues and pull_request events
- [ ] Add conditional logic to post a comment directing users to Linuxbrew/brew or Linuxbrew/homebrew-core based on content
- [ ] Set the workflow to close the issue/PR after commenting
- [ ] Test with a dummy issue/PR before merging
Document the Aliases directory structure and purpose in Library/Aliases/README.md
The Library/Aliases directory contains 50+ alias files but there's no documentation explaining what aliases are, why they exist, or how they map to actual formulae. New contributors looking at this structure will be confused. Adding Library/Aliases/README.md would explain the alias system and help future maintainers understand the legacy structure before the split.
- [ ] Create Library/Aliases/README.md explaining the alias system
- [ ] Document 5-10 example aliases and their purpose (e.g., 'golang' → 'go')
- [ ] Explain how aliases were handled during the migration to Linuxbrew/brew
- [ ] Note which aliases are deprecated or superseded
- [ ] Add a reference to where aliases now live in the split repositories
🌿Good first issues
No valid first issues—this repository is closed to new contributions. If you want to contribute: (1) To add a new package formula → open PR at Linuxbrew/homebrew-core with your formula in Library/Formula/; (2) To fix core package manager bugs → open PR at Linuxbrew/brew; (3) To document migration paths → contribute to Linuxbrew/brew or homebrew-core READMEs.
⭐Top contributors
Click to expand
Top contributors
- @xu-cheng — 26 commits
- @sjackman — 16 commits
- @BrewTestBot — 13 commits
- @LinuxbrewTestBot — 6 commits
- @rwhogg — 4 commits
📝Recent commits
Click to expand
Recent commits
5320403— Troubleshooting.md: update link (keikun17)eec5059— Merge branch homebrew/master into linuxbrew/master (sjackman)dc1c2b5— JavaRequirement: Linuxbrew default_formula "jdk" (ilovezfs)7f7a11a— libgpm: add 1.20.7 bottle for Linuxbrew. (LinuxbrewTestBot)0afa7cc— libgpm 1.20.7 (new formula) (dochang)805c9c1— git: update 2.8.0 bottle for Linuxbrew. (LinuxbrewTestBot)91ee53e— git: Fix Error: Directory not empty for Linuxbrew (Chase Geigle)44cbc9f— README.md: Mention Raspberry Pi specifically (sjackman)0ffacee— Update README.md (kaos)66d2c87— go: Fix unknown relocation type 42 for Linuxbrew (sjackman)
🔒Security observations
This legacy repository contains multiple critical security vulnerabilities, primarily in the Docker configuration. The most severe issues are: (1) unrestricted passwordless sudo access for the application user, (2) use of obsolete Ruby 2.0 with unpatched vulnerabilities, and (3) untagged base image leading to non-reproducible builds. While the codebase itself appears to be a defunct package manager with limited active attack surface, the infrastructure configuration poses significant risks if deployed. The repository is marked as deprecated and split into separate projects, so these vulnerabilities may not be actively exploited, but any derivatives should address these issues immediately.
- High · Unrestricted sudo access in Docker container —
Dockerfile, line: echo 'linuxbrew ALL=(ALL) NOPASSWD:ALL' >>/etc/sudoers. The Dockerfile grants the 'linuxbrew' user unrestricted sudo access with NOPASSWD:ALL. This allows any process running as 'linuxbrew' to execute arbitrary commands with root privileges without authentication, severely compromising container security. Fix: Remove the sudoers entry or use principle of least privilege. Grant only specific commands that require elevated privileges using sudoers configuration like: linuxbrew ALL=(ALL) NOPASSWD:/usr/bin/specific-command - High · Outdated Ruby version —
Dockerfile, line: RUN apt-get install -y curl g++ git make ruby2.0 ruby2.0-dev. The Dockerfile uses Ruby 2.0, which is severely outdated (released in 2013, EOL in 2015). It contains numerous known vulnerabilities and security issues. No security patches are available. Fix: Update to a maintained Ruby version (3.2+). Change 'ruby2.0' to a current stable version and verify compatibility with the codebase. - Medium · Base image without specific version tag —
Dockerfile, line 1: FROM ubuntu. The Dockerfile uses 'FROM ubuntu' without specifying a version tag. This creates non-reproducible builds and may pull different base images over time, potentially introducing vulnerabilities inconsistently. Fix: Use a specific Ubuntu LTS version tag, e.g., 'FROM ubuntu:20.04' or 'FROM ubuntu:22.04', to ensure reproducible and controlled builds. - Medium · Missing APT cache cleanup —
Dockerfile, lines 4-6. The Dockerfile does not clean up APT cache after package installation, resulting in larger Docker images that retain unnecessary package metadata and potentially outdated package lists. Fix: Add 'apt-get clean && rm -rf /var/lib/apt/lists/*' at the end of the RUN command to reduce image size and remove cached vulnerability data. - Medium · No health checks or security hardening —
Dockerfile. The Docker configuration lacks security best practices such as HEALTHCHECK directives, security scanning, or runtime security constraints. Fix: Add HEALTHCHECK instruction, use security scanning tools, consider using --security-opt flags, and implement runtime security policies. - Low · Deprecated MAINTAINER instruction —
Dockerfile, line 2: MAINTAINER Shaun Jackman <sjackman@gmail.com>. The Dockerfile uses the deprecated MAINTAINER instruction. Modern Docker recommends using LABEL metadata instead. Fix: Replace with: LABEL maintainer='Shaun Jackman sjackman@gmail.com' - Low · Locale configuration without verification —
Dockerfile, line 8: RUN localedef -i en_US -f UTF-8 en_US.UTF-8. The locale definition command assumes successful execution without error handling or verification. Fix: Add error handling: 'RUN localedef -i en_US -f UTF-8 en_US.UTF-8 || true' or verify the command succeeds.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.