RHEL and macOS Bash and Tooling Compatibility
Date: 2026-03-31 (updated 2026-03-31) Category: platform-research Status: Complete
Research Question
What bash version and shell tooling is available on RHEL 8, RHEL 9, RHEL 10, and macOS, and what constraints does this impose on the installer script?
Background
The PRD specifies a bash shell script-based installer targeting RHEL. This research validates bash version availability, required tool availability, and YAML processing options across RHEL 8, RHEL 9, RHEL 10, and macOS.
Methodology
- Reviewed RHEL 8, RHEL 9, and RHEL 10 package repositories for bash, git, curl versions
- Tested the current system (RHEL 9 based on
uname -routput: 5.14.0-570.81.1.el9_6.x86_64) - Researched YAML processing tools available on RHEL
- Reviewed RHEL compatibility with Claude Code and Cursor IDE
- Researched macOS default bash version and Homebrew bash availability
- Verified Claude Code and Cursor skill paths on macOS
Key Findings
Finding 1: Bash Versions on RHEL
- Description: RHEL 8 ships bash 4.4; RHEL 9 ships bash 5.1; RHEL 10 ships bash 5.2.26. All versions support associative arrays, process substitution, and other features needed for a modern installer script. The PRD’s requirement of bash >= 4.0 is met by all three.
- Evidence: RHEL 8 base repo: bash-4.4.x; RHEL 9 base repo: bash-5.1.x; RHEL 10 base repo: bash-5.2.26-4.el10
- Confidence: High
- Source: Red Hat Package Browser, RHEL 10 Package Manifest
Finding 2: Core Tool Availability
- Description: Required tools are available in RHEL base repositories:
git: Available in AppStream (RHEL 8: 2.39+, RHEL 9: 2.43+)curl: Available in BaseOS (both RHEL 8 and 9)mktemp,cp,rm,chmod,mkdir: coreutils, always presentsed,grep,awk: Always present in base install
- Evidence: Standard RHEL minimal install includes these tools
- Confidence: High
- Source: RHEL system package lists
Finding 3: YAML Processing Options
- Description: RHEL does not include a YAML parser in its base install. Options for the registry.yaml file:
yq(Mike Farah’s Go version): Available as a static binary download; not in RHEL repos but easy to fetchpython3 -c "import yaml": Python 3 is available on RHEL 8/9, but PyYAML may not be installed by default- Pure bash parsing: Possible for simple YAML but fragile and not recommended
jq+ JSON registry:jqis available in EPEL; using JSON instead of YAML avoids the YAML parsing problem entirely
- Evidence: RHEL repos lack yq; Python 3.9 (RHEL 9) / 3.6 (RHEL 8) available
- Confidence: High
- Source: RHEL package availability, EPEL repository contents
Finding 4: Claude Code and Cursor on RHEL
- Description: Claude Code (CLI) is installed via npm or direct download and works on Linux including RHEL. Cursor IDE is an Electron app available for Linux (AppImage/deb). Both run on RHEL 9; RHEL 8 may require additional libraries for Cursor’s Electron runtime.
- Evidence: Claude Code requires Node.js 18+; Cursor provides Linux AppImage
- Confidence: Medium
- Source: Claude Code docs, Cursor download page
Finding 5: File Path Conventions
- Description: On Linux (RHEL), the skill directories are:
- Claude Code:
~/.claude/skills/(home directory hidden folder) - Cursor:
~/.cursor/skills-cursor/(home directory hidden folder) Both follow XDG-adjacent conventions using hidden directories in $HOME.
- Claude Code:
- Evidence: Consistent with Linux documentation for both tools
- Confidence: High
- Source: Official documentation for both platforms
Finding 6: RHEL 10 Availability
- Description: RHEL 10.0 was released on May 20, 2025 with kernel 6.12. RHEL 10.1 followed on November 11, 2025. RHEL 10 ships bash 5.2.26, Python 3.12, and includes git and curl in the BaseOS repository. All existing RHEL 8/9 tooling assumptions hold for RHEL 10.
- Evidence: RHEL 10.0 GA: 2025-05-20; RHEL 10.1 GA: 2025-11-11; bash-5.2.26-4.el10 in BaseOS
- Confidence: High
- Source: RHEL Release Dates, RHEL 10 Release Notes, RHEL 10 Package Manifest
Finding 7: macOS Default Bash Version
- Description: macOS ships bash 3.2.57, frozen at this version since 2007 due to Apple’s refusal to adopt the GPLv3 license used by bash 4.0+. Since macOS Catalina (2019), zsh is the default shell. The installer’s minimum requirement of bash 4.4+ is NOT met by the default macOS bash. Users must install bash 5.x via Homebrew (
brew install bash), which installs to/opt/homebrew/bin/bash(Apple Silicon) or/usr/local/bin/bash(Intel). - Evidence:
bash --versionon macOS reports 3.2.57; Homebrew bash installs 5.2+ - Confidence: High
- Source: macOS bash version constraints, Stack Overflow: macOS bash version
Finding 8: macOS Skill Paths Are Identical to Linux
- Description: On macOS, both Claude Code and Cursor IDE use the same home-directory-based skill paths as on Linux:
- Claude Code:
~/.claude/skills/(global),.claude/skills/(project) - Cursor:
~/.cursor/skills-cursor/(global),.cursor/skills/(project) There is no~/Library/Application Support/variant for skills. Claude Desktop’s MCP config on macOS is at~/Library/Application Support/Claude/claude_desktop_config.json, but that is unrelated to skills.
- Claude Code:
- Evidence: Official Claude Code and Cursor documentation confirm
~/.claude/and~/.cursor/on all platforms - Confidence: High
- Source: Claude Code .claude directory, Cursor Skills docs
Finding 9: macOS Tool Availability
- Description: On macOS,
gitis available via Xcode Command Line Tools (xcode-select --install) or Homebrew.curlships with macOS.jqis available via Homebrew (brew install jq). Python 3 is available via Xcode or Homebrew. The installer should detect the platform and provide appropriate install instructions (dnf on RHEL, brew on macOS). - Evidence: macOS includes curl and git (via Xcode CLT); Homebrew provides jq, python3, bash
- Confidence: High
- Source: Claude Code macOS install guide
Finding 10: SELinux Considerations
- Description: RHEL runs SELinux in enforcing mode by default. The installer script writes to user home directories (
~/.claude/,~/.cursor/), which should be in theuser_home_tcontext and not trigger SELinux denials. However, if scripts inscripts/need to be executed, they must have appropriate execute permissions and SELinux context. - Evidence: Standard home directory operations are permitted under default SELinux policy
- Confidence: Medium
- Source: RHEL SELinux documentation
Implications
Architectural Impact
- The installer can safely target bash 4.4+ (lowest common denominator: RHEL 8)
- RHEL 10 is fully compatible with no changes needed
- macOS requires Homebrew bash as a prerequisite; the installer must detect the bash version at runtime
- YAML registry parsing requires either bundling yq or switching to JSON format
- SELinux should not be a concern for basic file installation to home directories
- Skill paths (
~/.claude/skills/,~/.cursor/skills-cursor/) are identical across Linux and macOS
Technology Choices
- Bash 4.4+ as minimum requirement
- Consider JSON registry instead of YAML to avoid yq dependency
- Use
curlfor HTTP fetches;gitfor repository operations - Avoid Python dependencies for the installer itself
- Platform-aware install instructions (
dnfon RHEL,brewon macOS)
Risk Assessment
- Low risk: Bash and core tools are universally available on RHEL 8/9/10
- Medium risk: YAML parsing requires external tool (yq) or format change (JSON)
- Low risk: SELinux unlikely to interfere with home directory writes
- Medium risk: Cursor IDE availability on RHEL 8 may be limited
- Medium risk: macOS users must install Homebrew bash before running the installer
Platform Support Matrix
| Platform | Bash Version | git | curl | jq | Status |
|---|---|---|---|---|---|
| RHEL 8 | 4.4 | AppStream | BaseOS | EPEL | Supported (minimum) |
| RHEL 9 | 5.1 | AppStream | BaseOS | EPEL | Supported |
| RHEL 10 | 5.2.26 | BaseOS | BaseOS | EPEL | Supported |
| macOS (default) | 3.2 | Xcode CLT | Built-in | - | Not supported (bash too old) |
| macOS (Homebrew) | 5.2+ | Xcode/brew | Built-in | brew | Supported |
Recommendations
- Target bash 4.4+ as minimum version (covers RHEL 8+ and macOS with Homebrew bash)
- Use JSON format for the registry file to avoid yq/PyYAML dependency
- Check for git and curl at runtime and provide clear error messages if missing
- Include
--check-prereqsflag to validate the environment - Test on RHEL 8, RHEL 9, RHEL 10, and macOS in CI
- Document SELinux considerations for scripts/ directory execution
- On macOS, detect bash version and provide
brew install bashinstructions if < 4.4 - Use platform detection (
uname -s) to tailor install instructions (dnf vs brew)
Related ADRs
- ADR-006: Shell Installer Architecture on RHEL
References
- Red Hat Enterprise Linux 10 Documentation
- Red Hat Enterprise Linux 10 Release Notes
- RHEL 10 Package Manifest
- RHEL Release Dates
- Red Hat Enterprise Linux 9 Documentation
- Red Hat Enterprise Linux 8 Documentation
- RHEL Package Browser
- yq - Command-line YAML processor
- Claude Code Installation
- Claude Code macOS Install Guide
- Claude Code .claude directory
- Cursor IDE Downloads
- macOS Bash Version Constraints
- Homebrew