The Joblet Runtime System provides pre-built, isolated runtime environments that eliminate installation delays and provide instant access to programming languages, databases, web servers, and other services.
# Traditional approach: 5-45 minutes every time
rnx job run 'apt-get update && apt-get install python3-pip && pip install pandas numpy scikit-learn matplotlib && python analysis.py'
# Runtime approach: 2-3 seconds total
rnx job run --runtime=python-3.11-ml python analysis.py
Joblet provides curated runtime environments for Python, Java, and machine learning applications:
python-3.11-ml
)Complete isolated Python environment with machine learning packages
# Usage examples
rnx job run --runtime=python-3.11-ml python3 -c "import pandas; print('Ready!')"
rnx job run --runtime=python-3.11-ml --upload=analysis.py python3 analysis.py
rnx runtime info python-3.11-ml # See all packages and details
python-3.11
)Lightweight Python runtime for general development
# Usage examples
rnx job run --runtime=python-3.11 python --version
rnx job run --runtime=python-3.11 pip install requests
rnx job run --runtime=python-3.11 python script.py
openjdk-21
)Modern Java with Long Term Support
# Usage examples
rnx job run --runtime=openjdk-21 java -version
rnx job run --runtime=openjdk-21 --upload=HelloWorld.java javac HelloWorld.java
rnx job run --runtime=openjdk-21 java HelloWorld
graalvmjdk-21
)High-performance Java with native compilation and polyglot support
# Usage examples
rnx job run --runtime=graalvmjdk-21 java -version
rnx job run --runtime=graalvmjdk-21 native-image --version
rnx job run --runtime=graalvmjdk-21 js --version
## π Getting Started
### 1. Install Runtime Environments
Runtimes are installed using the RNX CLI, which automatically uses the RuntimeService for safe installation:
```bash
# From any RNX client (automatically routes to RuntimeService)
rnx runtime install python-3.11-ml
rnx runtime install python-3.11
rnx runtime install openjdk-21
rnx runtime install graalvmjdk-21
# Force reinstall if runtime already exists
rnx runtime install python-3.11-ml --force
rnx runtime install openjdk-21 -f
Installation Options:
--force
or -f
: Force reinstall by deleting existing runtime before installation
/opt/joblet/runtimes/<runtime-name>
if it existsArchitecture Benefits:
# From any RNX client
rnx runtime list
Output:
RUNTIME VERSION TYPE SIZE DESCRIPTION
------- ------- ---- ---- -----------
python-3.11-ml 3.11 system 475MB Python 3.11 with ML packages for AI development
python-3.11 3.11 system 200MB Lightweight Python for general development
openjdk-21 21.0 system 371MB OpenJDK 21 LTS for enterprise applications
graalvmjdk-21 21.0 system 490MB GraalVM JDK 21 with native-image and polyglot
Total runtimes: 4
# Detailed runtime information
rnx runtime info python-3.11-ml
Output:
Runtime: python-3.11-ml
Type: system
Version: 3.11
Description: Completely isolated Python 3.11 with ML packages
Requirements:
Minimum Memory: 512MB
Recommended Memory: 2GB
Architectures: x86_64, amd64
Pre-installed Packages:
- numpy>=1.24.3,<2.0
- pandas>=2.0.3,<2.1
- scikit-learn>=1.3.0,<1.4
- matplotlib>=3.7.0,<3.8
- seaborn>=0.12.0,<0.13
- scipy>=1.11.0,<1.12
Usage:
rnx job run --runtime=python-3.11-ml <command>
# Test runtime is working correctly
rnx runtime test python-3.11-ml
Output:
Testing runtime: python-3.11-ml
β Runtime test passed
Output: Runtime resolution successful
To test the runtime in a job:
rnx job run --runtime=python-3.11-ml python --version
The runtime system supports zero-contamination deployment for production environments. Build runtimes once on development hosts, then deploy clean packages anywhere without installing build tools.
# Step 1: Build runtime (on development/build host)
sudo ./runtimes/python-3.11-ml/setup_python_3_11_ml.sh
# β
Creates: /tmp/runtime-deployments/python-3.11-ml-runtime.zip
# Step 2: Copy to workstation
scp build-host:/tmp/runtime-deployments/python-3.11-ml-runtime.zip .
# Step 3: Deploy to production (zero contamination)
sudo unzip python-3.11-ml-runtime.zip -d /opt/joblet/runtimes/
# β
Deploys to: /opt/joblet/runtimes/python/python-3.11-ml
# Deploy to multiple production hosts
for host in prod-01 prod-02 prod-03; do
scp python-3.11-ml-runtime.zip admin@$host:/tmp/
ssh admin@$host "sudo unzip /tmp/python-3.11-ml-runtime.zip -d /opt/joblet/runtimes/"
done
Each runtime package is a self-contained zip file containing:
π Detailed Guide: See RUNTIME_DEPLOYMENT.md for comprehensive deployment documentation, CI/CD integration, and advanced scenarios.
# List all available runtimes
rnx runtime list
# Get detailed information about a runtime
rnx runtime info <runtime-name>
# Test runtime functionality
rnx runtime test <runtime-name>
# Install a runtime from local codebase
rnx runtime install <runtime-name>
# Remove an installed runtime
rnx runtime remove <runtime-name>
# Build a runtime from custom source
rnx runtime build <runtime-name> [--repository=...] [--branch=...]
# Validate runtime specification
rnx runtime validate <runtime-name>
# Install Python runtime
rnx runtime install python-3.11-ml
# Install Java runtime
rnx runtime install openjdk-21
# Check installation status
rnx runtime info python-3.11-ml
# Remove runtime when no longer needed
rnx runtime remove python-3.11-ml
# Check runtime installation status
rnx runtime status
# Basic usage
rnx job run --runtime=<runtime-name> <command>
# With file uploads
rnx job run --runtime=python-3.11-ml --upload=script.py python script.py
# With resource limits
rnx job run --runtime=java:17 --max-memory=2048 --max-cpu=50 java BigApplication
# With networks and volumes
rnx job run --runtime=python-3.11-ml --volume=datasets --network=isolated python analysis.py
# Scheduled execution
rnx job run --runtime=java:21 --schedule="1hour" java MaintenanceJob
Runtime names support multiple formats:
# Hyphen-separated format (recommended)
--runtime=python-3.11-ml
--runtime=java:17
--runtime=java:21
# Colon-separated format (legacy)
--runtime=python-3.11-ml
--runtime=java:17
--runtime=java:21
Scenario | Traditional | Runtime | Speedup |
---|---|---|---|
Python + NumPy/Pandas | 5-15 minutes | 2-3 seconds | 100-300x |
Python + Full ML Stack | 15-45 minutes | 2-3 seconds | 300-1000x |
Java Development | 30-120 seconds | 2-3 seconds | 15-40x |
Node.js + Dependencies | 60-300 seconds | 2-3 seconds | 20-100x |
Traditional Approach:
# 15-30 minutes every time
rnx job run 'apt-get update && apt-get install -y python3-pip && pip install pandas numpy scikit-learn matplotlib seaborn && python analysis.py'
Runtime Approach:
# 2-3 seconds total
rnx job run --runtime=python-3.11-ml python analysis.py
Traditional Approach:
# 2-5 minutes every time
rnx job run 'apt-get update && apt-get install -y openjdk-17-jdk maven && javac HelloWorld.java && java HelloWorld'
Runtime Approach:
# 2-3 seconds total
rnx job run --runtime=java:17 bash -c "javac HelloWorld.java && java HelloWorld"
Traditional Approach:
# 5-10 minutes every time
rnx job run 'apt-get update && apt-get install -y default-jdk maven && mvn compile exec:java'
Runtime Approach:
# 2-3 seconds total
rnx job run --runtime=java:17 java Application
Each runtime is completely self-contained, including both runtime-specific files AND all necessary system binaries
in its isolated/
directory. This eliminates dependency on host system files during job execution.
/opt/joblet/runtimes/
βββ python-3.11-ml/ # Flat structure (no nested language dirs)
β βββ runtime.yml # Runtime configuration
β βββ isolated/ # Complete filesystem for job
β βββ bin/ # System binaries (bash, sh, ls, etc.)
β βββ lib/ # System libraries
β βββ lib64/ # 64-bit libraries
β βββ usr/
β β βββ bin/ # User binaries (python3, pip, etc.)
β β βββ lib/ # User libraries
β β βββ lib/python3/ # Python packages
β β βββ local/ # Python runtime installation
β βββ etc/ # Configuration files (ssl, ca-certificates)
β βββ lib/x86_64-linux-gnu/ # Architecture-specific libraries (AMD64)
β or
β βββ lib/aarch64-linux-gnu/ # Architecture-specific libraries (ARM64)
βββ openjdk-21/
β βββ runtime.yml
β βββ isolated/
β βββ bin/ # System binaries
β βββ lib/ # System libraries
β βββ usr/
β β βββ lib/jvm/ # Complete JVM installation
β β βββ share/java/ # Java libraries
β βββ etc/ # Java configuration
βββ nodejs-20/ # Future runtime example
βββ runtime.yml
βββ isolated/
βββ ... # Complete Node.js environment
runtime.yml
)name: "python-3.11-ml"
version: "3.11"
description: "Python with ML packages - self-contained (7785 files)"
# All mounts from isolated/ - no host dependencies
mounts:
# System directories
- source: "isolated/bin"
target: "/bin"
readonly: true
- source: "isolated/lib"
target: "/lib"
readonly: true
- source: "isolated/lib64"
target: "/lib64"
readonly: true
- source: "isolated/usr/bin"
target: "/usr/bin"
readonly: true
- source: "isolated/usr/lib"
target: "/usr/lib"
readonly: true
- source: "isolated/usr/lib64"
target: "/usr/lib64"
readonly: true
# Architecture-specific libraries (AMD64 example)
- source: "isolated/lib/x86_64-linux-gnu"
target: "/lib/x86_64-linux-gnu"
readonly: true
- source: "isolated/usr/lib/x86_64-linux-gnu"
target: "/usr/lib/x86_64-linux-gnu"
readonly: true
# System configuration
- source: "isolated/etc/ssl"
target: "/etc/ssl"
readonly: true
- source: "isolated/etc/ca-certificates"
target: "/etc/ca-certificates"
readonly: true
- source: "isolated/usr/share/ca-certificates"
target: "/usr/share/ca-certificates"
readonly: true
# Python-specific mounts
- source: "isolated/usr/lib/python3/dist-packages"
target: "/usr/local/lib/python3.11/site-packages"
readonly: true
- source: "isolated/usr/local/bin"
target: "/usr/local/bin"
readonly: true
environment:
PYTHON_HOME: "/usr/local"
PYTHONPATH: "/usr/local/lib/python3.11/site-packages"
PATH: "/usr/local/bin:/usr/bin:/bin"
LD_LIBRARY_PATH: "/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu:/lib64:/usr/lib:/lib"
Each runtime includes platform-specific setup scripts that handle:
/lib/x86_64-linux-gnu/
paths/lib/aarch64-linux-gnu/
pathsLD_LIBRARY_PATH
settingsYou can create your own runtime environments using platform-specific setup scripts:
/opt/joblet/runtimes/<runtime-name>/ # Flat structure
βββ runtime.yml # Configuration
βββ isolated/ # Complete filesystem
βββ bin/ # System binaries
βββ lib/ # System libraries
βββ usr/ # User space
βββ etc/ # Configuration
runtimes/<runtime-name>/
βββ setup-ubuntu-amd64.sh # Ubuntu AMD64 setup
βββ setup-ubuntu-arm64.sh # Ubuntu ARM64 setup
βββ setup-amzn-amd64.sh # Amazon Linux AMD64
βββ setup-amzn-arm64.sh # Amazon Linux ARM64
βββ setup-rhel-amd64.sh # RHEL/CentOS AMD64
βββ setup-rhel-arm64.sh # RHEL/CentOS ARM64
runtime.yml
):name: "my-custom-runtime"
version: "1.0"
description: "Custom runtime - self-contained"
mounts:
# All paths relative to isolated/
- source: "isolated/bin"
target: "/bin"
readonly: true
- source: "isolated/usr/bin"
target: "/usr/bin"
readonly: true
- source: "isolated/lib"
target: "/lib"
readonly: true
- source: "isolated/usr/lib"
target: "/usr/lib"
readonly: true
environment:
PATH: "/usr/bin:/bin"
LD_LIBRARY_PATH: "/usr/lib:/lib"
requirements:
min_memory: "256MB"
recommended_memory: "1GB"
architectures: [ "x86_64", "amd64" ]
/opt/joblet/runtimes/<name>/setup_<name>.sh
Hereβs a basic Python runtime structure:
# 1. Create directory structure
sudo mkdir -p /opt/joblet/runtimes/python/python-3.12-custom
cd /opt/joblet/runtimes/python/python-3.12-custom
# 2. Install Python from source or binaries
# ... installation steps ...
# 3. Create runtime.yml
sudo tee runtime.yml << EOF
name: "python-3.12-custom"
type: "managed"
version: "3.12.0"
description: "Python 3.12 with custom packages"
mounts:
- source: "bin"
target: "/usr/local/bin"
readonly: true
selective: ["python3", "pip", "pip3"]
- source: "lib"
target: "/usr/local/lib"
readonly: true
environment:
PYTHON_HOME: "/usr/local"
PATH_PREPEND: "/usr/local/bin"
package_manager:
type: "pip"
cache_volume: "pip-cache"
EOF
# Python ML jobs typically need 1-4GB
rnx job run --runtime=python-3.11-ml --max-memory=2048 python analysis.py
# CPU-intensive ML workloads
rnx job run --runtime=python-3.11-ml --max-cpu=75 --cpu-cores="0-3" python training.py
rnx volume create datasets --size=10GB
rnx job run --runtime=python-3.11-ml --volume=datasets python process_data.py
rnx job run --runtime=python-3.11-ml --upload=experiment.py python experiment.py
rnx job run --runtime=python-3.11-ml --max-memory=512 --upload=test.py python test.py
rnx job run --runtime=python-3.11-ml --volume=data --network=prod python production.py
Error: runtime not found: python-3.11-ml
Solution: Install the runtime on the server
# On Joblet server
sudo /opt/joblet/runtimes/python-3.11-ml/setup_python_3_11_ml.sh
Error: error while loading shared libraries: libpython3.11.so.1.0: cannot open shared object file
Solution: Runtime installation includes library fixes. Reinstall:
# Remove old installation
sudo rm -rf /opt/joblet/runtimes/python/python-3.11-ml
# Reinstall with updated script
sudo /opt/joblet/runtimes/python-3.11-ml/setup_python_3_11_ml.sh
Error: Job killed due to memory limit
Solution: Increase memory allocation
# ML jobs typically need 1-4GB
rnx job run --runtime=python-3.11-ml --max-memory=2048 python analysis.py
Error: numpy.dtype size changed, may indicate binary incompatibility
Solution: Runtime uses compatible package versions. Use runtime packages:
# Don't install additional packages - use what's pre-installed
rnx job run --runtime=python-3.11-ml python -c "import numpy; print(numpy.__version__)"
# Check runtime availability
rnx runtime list
# Test specific runtime
rnx runtime test python-3.11-ml
# Check runtime details
rnx runtime info python-3.11-ml
# Verify job execution
rnx job run --runtime=python-3.11-ml python -c "import sys; print(sys.executable)"
# Check server logs (on server)
sudo journalctl -u joblet.service -f
/opt/joblet/examples/python-ml/
contains working examplesrnx runtime info <runtime>
shows package versionsrnx runtime test <runtime>
validates setupNext Steps:
The Runtime System transforms Joblet from a job execution platform into a complete development and production environment with instant access to any language ecosystem! π