├── .github └── workflows │ └── build-image.yml ├── .gitignore ├── Dockerfile ├── LICENSES ├── LICENSE ├── codex-universal-image-sbom.md └── codex-universal-image-sbom.spdx.json ├── README.md ├── entrypoint.sh └── setup_universal.sh /.github/workflows/build-image.yml: -------------------------------------------------------------------------------- 1 | name: Build image 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | permissions: 10 | contents: read 11 | packages: write 12 | id-token: write 13 | attestations: write 14 | 15 | env: 16 | REGISTRY: ghcr.io 17 | IMAGE_NAME: ${{ github.repository }} 18 | 19 | jobs: 20 | build-and-push: 21 | runs-on: ubuntu-latest 22 | permissions: 23 | contents: read 24 | packages: write 25 | attestations: write 26 | id-token: write 27 | steps: 28 | - uses: actions/checkout@v4 29 | - name: Log in to ghcr.io 30 | uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 31 | with: 32 | registry: ${{ env.REGISTRY }} 33 | username: ${{ github.actor }} 34 | password: ${{ secrets.GITHUB_TOKEN }} 35 | - name: Set up QEMU 36 | uses: docker/setup-qemu-action@v3 37 | - name: Set up Docker Buildx 38 | uses: docker/setup-buildx-action@v3 39 | 40 | - name: Build and push 41 | id: docker_build 42 | uses: docker/build-push-action@v6 43 | with: 44 | platforms: linux/amd64,linux/arm64 45 | push: ${{ github.event_name == 'push' }} 46 | tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest 47 | cache-from: type=gha 48 | cache-to: type=gha,mode=max 49 | 50 | - name: Generate artifact attestation 51 | uses: actions/attest-build-provenance@v2 52 | if: ${{ github.event_name == 'push' }} 53 | with: 54 | push-to-registry: true 55 | subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} 56 | subject-digest: ${{ steps.docker_build.outputs.digest }} 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:24.04 2 | 3 | ENV LANG="C.UTF-8" 4 | ENV HOME=/root 5 | 6 | ### BASE ### 7 | 8 | RUN apt-get update \ 9 | && apt-get upgrade -y \ 10 | && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 11 | binutils \ 12 | sudo \ 13 | build-essential \ 14 | bzr \ 15 | curl \ 16 | default-libmysqlclient-dev \ 17 | dnsutils \ 18 | gettext \ 19 | git \ 20 | git-lfs \ 21 | gnupg2 \ 22 | inotify-tools \ 23 | iputils-ping \ 24 | jq \ 25 | libbz2-dev \ 26 | libc6 \ 27 | libc6-dev \ 28 | libcurl4-openssl-dev \ 29 | libdb-dev \ 30 | libedit2 \ 31 | libffi-dev \ 32 | libgcc-13-dev \ 33 | libgcc1 \ 34 | libgdbm-compat-dev \ 35 | libgdbm-dev \ 36 | libgdiplus \ 37 | libgssapi-krb5-2 \ 38 | liblzma-dev \ 39 | libncurses-dev \ 40 | libncursesw5-dev \ 41 | libnss3-dev \ 42 | libpq-dev \ 43 | libpsl-dev \ 44 | libpython3-dev \ 45 | libreadline-dev \ 46 | libsqlite3-dev \ 47 | libssl-dev \ 48 | libstdc++-13-dev \ 49 | libunwind8 \ 50 | libuuid1 \ 51 | libxml2-dev \ 52 | libz3-dev \ 53 | make \ 54 | moreutils \ 55 | netcat-openbsd \ 56 | openssh-client \ 57 | pkg-config \ 58 | protobuf-compiler \ 59 | python3-pip \ 60 | ripgrep \ 61 | rsync \ 62 | software-properties-common \ 63 | sqlite3 \ 64 | swig3.0 \ 65 | tk-dev \ 66 | tzdata \ 67 | unixodbc-dev \ 68 | unzip \ 69 | uuid-dev \ 70 | xz-utils \ 71 | zip \ 72 | zlib1g \ 73 | zlib1g-dev \ 74 | && rm -rf /var/lib/apt/lists/* 75 | 76 | ### PYTHON ### 77 | 78 | ARG PYENV_VERSION=v2.5.5 79 | ARG PYTHON_VERSION=3.11.12 80 | 81 | # Install pyenv 82 | ENV PYENV_ROOT=/root/.pyenv 83 | ENV PATH=$PYENV_ROOT/bin:$PATH 84 | RUN git -c advice.detachedHead=0 clone --branch ${PYENV_VERSION} --depth 1 https://github.com/pyenv/pyenv.git "${PYENV_ROOT}" \ 85 | && echo 'export PYENV_ROOT="$HOME/.pyenv"' >> /etc/profile \ 86 | && echo 'export PATH="$$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH"' >> /etc/profile \ 87 | && echo 'eval "$(pyenv init - bash)"' >> /etc/profile \ 88 | && cd ${PYENV_ROOT} && src/configure && make -C src \ 89 | && pyenv install 3.10 3.11.12 3.12 3.13 \ 90 | && pyenv global ${PYTHON_VERSION} 91 | # Install pipx for common global package managers (e.g. poetry) 92 | ENV PIPX_BIN_DIR=/root/.local/bin 93 | ENV PATH=$PIPX_BIN_DIR:$PATH 94 | RUN apt-get update && apt-get install -y pipx \ 95 | && rm -rf /var/lib/apt/lists/* \ 96 | && pipx install poetry uv \ 97 | # Preinstall common packages for each version 98 | && for pyv in $(ls ${PYENV_ROOT}/versions/); do \ 99 | ${PYENV_ROOT}/versions/$pyv/bin/pip install --upgrade pip ruff black mypy pyright isort; \ 100 | done 101 | # Reduce the verbosity of uv - impacts performance of stdout buffering 102 | ENV UV_NO_PROGRESS=1 103 | 104 | ### NODE ### 105 | 106 | ARG NVM_VERSION=v0.40.2 107 | ARG NODE_VERSION=22 108 | 109 | ENV NVM_DIR=/root/.nvm 110 | # Corepack tries to do too much - disable some of its features: 111 | # https://github.com/nodejs/corepack/blob/main/README.md 112 | ENV COREPACK_DEFAULT_TO_LATEST=0 113 | ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 114 | ENV COREPACK_ENABLE_AUTO_PIN=0 115 | ENV COREPACK_ENABLE_STRICT=0 116 | RUN git -c advice.detachedHead=0 clone --branch ${NVM_VERSION} --depth 1 https://github.com/nvm-sh/nvm.git "${NVM_DIR}" \ 117 | && echo 'source $NVM_DIR/nvm.sh' >> /etc/profile \ 118 | && echo "prettier\neslint\ntypescript" > $NVM_DIR/default-packages \ 119 | && . $NVM_DIR/nvm.sh \ 120 | && nvm install 18 \ 121 | && nvm install 20 \ 122 | && nvm install 22 \ 123 | && nvm alias default $NODE_VERSION \ 124 | && corepack enable \ 125 | && corepack install -g yarn pnpm npm 126 | 127 | ### BUN ### 128 | 129 | ARG BUN_VERSION=1.2.14 130 | 131 | ENV BUN_INSTALL=/root/.bun 132 | ENV PATH="$BUN_INSTALL/bin:$PATH" 133 | 134 | RUN mkdir -p "$BUN_INSTALL/bin" \ 135 | && curl -L --fail "https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/bun-linux-x64-baseline.zip" \ 136 | -o /tmp/bun.zip \ 137 | && unzip -q /tmp/bun.zip -d "$BUN_INSTALL/bin" \ 138 | && mv "$BUN_INSTALL/bin/bun-linux-x64-baseline/bun" "$BUN_INSTALL/bin/bun" \ 139 | && chmod +x "$BUN_INSTALL/bin/bun" \ 140 | && rm -rf "$BUN_INSTALL/bin/bun-linux-x64-baseline" /tmp/bun.zip \ 141 | && echo 'export BUN_INSTALL=/root/.bun' >> /etc/profile \ 142 | && echo 'export PATH="$BUN_INSTALL/bin:$PATH"' >> /etc/profile 143 | 144 | ### JAVA ### 145 | 146 | ARG JAVA_VERSION=21 147 | ARG GRADLE_VERSION=8.14 148 | ARG GRADLE_DOWNLOAD_SHA256=61ad310d3c7d3e5da131b76bbf22b5a4c0786e9d892dae8c1658d4b484de3caa 149 | 150 | ENV GRADLE_HOME=/opt/gradle 151 | RUN apt-get update && apt-get install -y --no-install-recommends \ 152 | openjdk-${JAVA_VERSION}-jdk \ 153 | && rm -rf /var/lib/apt/lists/* \ 154 | && curl -LO "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \ 155 | && echo "${GRADLE_DOWNLOAD_SHA256} *gradle-${GRADLE_VERSION}-bin.zip" | sha256sum --check - \ 156 | && unzip gradle-${GRADLE_VERSION}-bin.zip \ 157 | && rm gradle-${GRADLE_VERSION}-bin.zip \ 158 | && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \ 159 | && ln -s "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle 160 | 161 | ### SWIFT ### 162 | 163 | ARG SWIFT_VERSION=6.1 164 | 165 | # Install swift. 166 | RUN mkdir /tmp/swiftly \ 167 | && cd /tmp/swiftly \ 168 | && curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz \ 169 | && tar zxf swiftly-$(uname -m).tar.gz \ 170 | && ./swiftly init --quiet-shell-followup -y \ 171 | && echo '. ~/.local/share/swiftly/env.sh' >> /etc/profile \ 172 | && bash -lc "swiftly install --use ${SWIFT_VERSION}" \ 173 | && rm -rf /tmp/swiftly 174 | 175 | ### RUBY ### 176 | 177 | RUN apt-get update && apt-get install -y --no-install-recommends \ 178 | ruby-full \ 179 | && rm -rf /var/lib/apt/lists/* 180 | 181 | ### RUST ### 182 | 183 | RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \ 184 | sh -s -- -y --profile minimal \ 185 | && . "$HOME/.cargo/env" \ 186 | && rustup show 187 | 188 | ### GO ### 189 | 190 | ARG GO_VERSION=1.23.8 191 | ARG GO_DOWNLOAD_SHA256=45b87381172a58d62c977f27c4683c8681ef36580abecd14fd124d24ca306d3f 192 | 193 | # Go defaults GOROOT to /usr/local/go - we just need to update PATH 194 | ENV PATH=/usr/local/go/bin:$HOME/go/bin:$PATH 195 | RUN mkdir /tmp/go \ 196 | && cd /tmp/go \ 197 | && curl -O https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz \ 198 | && echo "${GO_DOWNLOAD_SHA256} *go${GO_VERSION}.linux-amd64.tar.gz" | sha256sum --check - \ 199 | && tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz \ 200 | && rm -rf /tmp/go 201 | 202 | ### BAZEL ### 203 | 204 | RUN curl -L --fail https://github.com/bazelbuild/bazelisk/releases/download/v1.26.0/bazelisk-linux-amd64 -o /usr/local/bin/bazelisk \ 205 | && chmod +x /usr/local/bin/bazelisk \ 206 | && ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel 207 | 208 | ### LLVM ### 209 | RUN apt-get update && apt-get install -y --no-install-recommends \ 210 | git \ 211 | cmake \ 212 | ccache \ 213 | python3 \ 214 | ninja-build \ 215 | nasm \ 216 | yasm \ 217 | gawk \ 218 | lsb-release \ 219 | wget \ 220 | software-properties-common \ 221 | gnupg \ 222 | && rm -rf /var/lib/apt/lists/* \ 223 | && bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" 224 | 225 | ### SETUP SCRIPTS ### 226 | 227 | COPY setup_universal.sh /opt/codex/setup_universal.sh 228 | RUN chmod +x /opt/codex/setup_universal.sh 229 | 230 | COPY entrypoint.sh /opt/entrypoint.sh 231 | RUN chmod +x /opt/entrypoint.sh 232 | 233 | ENTRYPOINT ["/opt/entrypoint.sh"] 234 | -------------------------------------------------------------------------------- /LICENSES/LICENSE: -------------------------------------------------------------------------------- 1 | codex-universal is licensed under an MIT License 2 | 3 | Copyright (c) 2025 OpenAI 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | 24 | The Docker image incorporates a variety of open source components, including but not limited to: 25 | 26 | - Base system: Ubuntu 24.04 27 | - Languages: Python, Node.js, Ruby, Go, Rust, Java (OpenJDK), Swift 28 | - Developer tools: Poetry, Bun, Gradle, LLVM, pipx, pyenv, and others 29 | 30 | These components are governed by licenses such as: 31 | - MIT, Apache-2.0, BSD, Python-2.0 (permissive) 32 | - GPL-2.0, GPL-2.0 with Classpath Exception, Artistic-2.0 (copyleft) 33 | 34 | We use these components in accordance with their licenses and do not statically link GPL-covered libraries with proprietary software. 35 | 36 | Software Bill of Materials (SBOM) 37 | 38 | To support transparency and license compliance, we provide the following SBOMs: 39 | 40 | - codex-universal-image-sbom.md : Human-readable list of components and licenses 41 | - codex-universal-image-sbom.spdx.json : SPDX-compliant JSON 42 | 43 | Source Code for Open Source Components 44 | 45 | You can obtain source code for components from their respective upstream sources: 46 | 47 | - Ubuntu: https://packages.ubuntu.com/ 48 | - PyPI: https://pypi.org/ 49 | - npm: https://www.npmjs.com/ 50 | - GitHub (for tools like pyenv, nvm, bun, bazelisk) 51 | -------------------------------------------------------------------------------- /LICENSES/codex-universal-image-sbom.md: -------------------------------------------------------------------------------- 1 | # Software Bill of Materials (SBOM) 2 | Generated for the OpenAI dev Docker image 3 | 4 | | Name | Version | Source | Method | License | 5 | |------|---------|--------|--------|---------| 6 | | ubuntu | 24.04 | Docker Hub | base image | Various (mostly GPLv2, LGPL, BSD, MIT) | 7 | | binutils | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 8 | | build-essential | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 9 | | bzr | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 10 | | ccache | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 11 | | cmake | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 12 | | curl | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 13 | | default-libmysqlclient-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 14 | | dnsutils | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 15 | | gawk | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 16 | | gettext | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 17 | | git | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 18 | | git-lfs | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 19 | | gnupg | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 20 | | gnupg2 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 21 | | inotify-tools | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 22 | | iputils-ping | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 23 | | jq | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 24 | | libbz2-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 25 | | libc6 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 26 | | libc6-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 27 | | libcurl4-openssl-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 28 | | libdb-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 29 | | libedit2 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 30 | | libffi-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 31 | | libgcc-13-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 32 | | libgcc1 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 33 | | libgdbm-compat-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 34 | | libgdbm-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 35 | | libgdiplus | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 36 | | libgssapi-krb5-2 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 37 | | liblzma-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 38 | | libncurses-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 39 | | libncursesw5-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 40 | | libnss3-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 41 | | libpq-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 42 | | libpsl-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 43 | | libpython3-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 44 | | libreadline-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 45 | | libsqlite3-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 46 | | libssl-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 47 | | libstdc++-13-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 48 | | libunwind8 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 49 | | libuuid1 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 50 | | libxml2-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 51 | | libz3-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 52 | | lsb-release | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 53 | | make | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 54 | | moreutils | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 55 | | nasm | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 56 | | netcat-openbsd | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 57 | | ninja-build | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 58 | | openjdk-${JAVA_VERSION}-jdk | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 59 | | openssh-client | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 60 | | pkg-config | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 61 | | protobuf-compiler | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 62 | | python3 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 63 | | python3-pip | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 64 | | ripgrep | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 65 | | rsync | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 66 | | ruby-full | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 67 | | sh -s -- -y --profile minimal | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 68 | | software-properties-common | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 69 | | sqlite3 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 70 | | sudo | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 71 | | swig3.0 | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 72 | | tk-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 73 | | tzdata | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 74 | | unixodbc-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 75 | | unzip | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 76 | | uuid-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 77 | | wget | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 78 | | xz-utils | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 79 | | yasm | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 80 | | zip | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 81 | | zlib1g | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 82 | | zlib1g-dev | N/A | apt.ubuntu.com | apt | Varies (Debian/Ubuntu ecosystem) | 83 | | bun | 1.2.10 | https://github.com/oven-sh/bun | curl+unzip | MIT | 84 | | go | 1.23.8 | https://golang.org/dl/ | curl+tar | BSD-3-Clause | 85 | | gradle | 8.14 | https://services.gradle.org | curl+unzip | Apache-2.0 | 86 | | bazelisk | 1.26.0 | https://github.com/bazelbuild/bazelisk | curl | Apache-2.0 | 87 | | swift | 6.1 | https://swift.org | swiftly script | Apache-2.0 | 88 | | llvm | latest | https://apt.llvm.org/llvm.sh | custom script | Apache-2.0 with LLVM exceptions | 89 | | pyenv | v2.5.5 | https://github.com/pyenv/pyenv | git clone | MIT | 90 | | nvm | v0.40.2 | https://github.com/nvm-sh/nvm | git clone | MIT | 91 | | Python | 3.10, 3.11.12, 3.12, 3.13 | https://www.python.org | pyenv | Python-2.0 | 92 | | Node.js | 18, 20, 22 | https://nodejs.org | nvm | MIT | 93 | | Java | OpenJDK 21 | https://openjdk.org | apt | GPL-2.0 with Classpath Exception | 94 | | Ruby | system default | https://www.ruby-lang.org | apt | Ruby / BSD dual-license | 95 | | Rust | stable | https://www.rust-lang.org | rustup | MIT OR Apache-2.0 | 96 | | poetry | latest | https://python-poetry.org | pipx | MIT | 97 | | uv | latest | https://pypi.org/project/uv | pipx | MIT | 98 | | ruff | latest | https://pypi.org/project/ruff | pip | MIT | 99 | | black | latest | https://pypi.org/project/black | pip | MIT | 100 | | mypy | latest | https://pypi.org/project/mypy | pip | MIT | 101 | | pyright | latest | https://pypi.org/project/pyright | pip | MIT | 102 | | isort | latest | https://pypi.org/project/isort | pip | MIT | 103 | | yarn | latest | https://yarnpkg.com | corepack | BSD-2-Clause | 104 | | pnpm | latest | https://pnpm.io | corepack | MIT | 105 | | npm | latest | https://www.npmjs.com | corepack | Artistic-2.0 | 106 | -------------------------------------------------------------------------------- /LICENSES/codex-universal-image-sbom.spdx.json: -------------------------------------------------------------------------------- 1 | { 2 | "SPDXID": "SPDXRef-DOCUMENT", 3 | "spdxVersion": "SPDX-2.2", 4 | "dataLicense": "CC0-1.0", 5 | "name": "openai/dev-image", 6 | "documentNamespace": "http://spdx.org/spdxdocs/openai-dev-image-208dc1f5-67b5-4b2f-b2de-6f3b8aee96bc", 7 | "creationInfo": { 8 | "created": "2025-05-15T23:37:28Z", 9 | "creators": [ 10 | "Organization: OpenAI", 11 | "Tool: ChatGPT SBOM Generator" 12 | ] 13 | }, 14 | "packages": [ 15 | { 16 | "name": "ubuntu", 17 | "SPDXID": "SPDXRef-Package-ubuntu", 18 | "versionInfo": "24.04", 19 | "downloadLocation": "Docker Hub", 20 | "licenseConcluded": "Various (mostly GPLv2, LGPL, BSD, MIT)", 21 | "licenseDeclared": "Various (mostly GPLv2, LGPL, BSD, MIT)", 22 | "supplier": "Organization: Unknown", 23 | "description": "Installed via base image" 24 | }, 25 | { 26 | "name": "binutils", 27 | "SPDXID": "SPDXRef-Package-binutils", 28 | "versionInfo": "N/A", 29 | "downloadLocation": "apt.ubuntu.com", 30 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 31 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 32 | "supplier": "Organization: Unknown", 33 | "description": "Installed via apt" 34 | }, 35 | { 36 | "name": "build-essential", 37 | "SPDXID": "SPDXRef-Package-build-essential", 38 | "versionInfo": "N/A", 39 | "downloadLocation": "apt.ubuntu.com", 40 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 41 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 42 | "supplier": "Organization: Unknown", 43 | "description": "Installed via apt" 44 | }, 45 | { 46 | "name": "bzr", 47 | "SPDXID": "SPDXRef-Package-bzr", 48 | "versionInfo": "N/A", 49 | "downloadLocation": "apt.ubuntu.com", 50 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 51 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 52 | "supplier": "Organization: Unknown", 53 | "description": "Installed via apt" 54 | }, 55 | { 56 | "name": "ccache", 57 | "SPDXID": "SPDXRef-Package-ccache", 58 | "versionInfo": "N/A", 59 | "downloadLocation": "apt.ubuntu.com", 60 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 61 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 62 | "supplier": "Organization: Unknown", 63 | "description": "Installed via apt" 64 | }, 65 | { 66 | "name": "cmake", 67 | "SPDXID": "SPDXRef-Package-cmake", 68 | "versionInfo": "N/A", 69 | "downloadLocation": "apt.ubuntu.com", 70 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 71 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 72 | "supplier": "Organization: Unknown", 73 | "description": "Installed via apt" 74 | }, 75 | { 76 | "name": "curl", 77 | "SPDXID": "SPDXRef-Package-curl", 78 | "versionInfo": "N/A", 79 | "downloadLocation": "apt.ubuntu.com", 80 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 81 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 82 | "supplier": "Organization: Unknown", 83 | "description": "Installed via apt" 84 | }, 85 | { 86 | "name": "default-libmysqlclient-dev", 87 | "SPDXID": "SPDXRef-Package-default-libmysqlclient-dev", 88 | "versionInfo": "N/A", 89 | "downloadLocation": "apt.ubuntu.com", 90 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 91 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 92 | "supplier": "Organization: Unknown", 93 | "description": "Installed via apt" 94 | }, 95 | { 96 | "name": "dnsutils", 97 | "SPDXID": "SPDXRef-Package-dnsutils", 98 | "versionInfo": "N/A", 99 | "downloadLocation": "apt.ubuntu.com", 100 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 101 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 102 | "supplier": "Organization: Unknown", 103 | "description": "Installed via apt" 104 | }, 105 | { 106 | "name": "gawk", 107 | "SPDXID": "SPDXRef-Package-gawk", 108 | "versionInfo": "N/A", 109 | "downloadLocation": "apt.ubuntu.com", 110 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 111 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 112 | "supplier": "Organization: Unknown", 113 | "description": "Installed via apt" 114 | }, 115 | { 116 | "name": "gettext", 117 | "SPDXID": "SPDXRef-Package-gettext", 118 | "versionInfo": "N/A", 119 | "downloadLocation": "apt.ubuntu.com", 120 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 121 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 122 | "supplier": "Organization: Unknown", 123 | "description": "Installed via apt" 124 | }, 125 | { 126 | "name": "git", 127 | "SPDXID": "SPDXRef-Package-git", 128 | "versionInfo": "N/A", 129 | "downloadLocation": "apt.ubuntu.com", 130 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 131 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 132 | "supplier": "Organization: Unknown", 133 | "description": "Installed via apt" 134 | }, 135 | { 136 | "name": "git-lfs", 137 | "SPDXID": "SPDXRef-Package-git-lfs", 138 | "versionInfo": "N/A", 139 | "downloadLocation": "apt.ubuntu.com", 140 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 141 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 142 | "supplier": "Organization: Unknown", 143 | "description": "Installed via apt" 144 | }, 145 | { 146 | "name": "gnupg", 147 | "SPDXID": "SPDXRef-Package-gnupg", 148 | "versionInfo": "N/A", 149 | "downloadLocation": "apt.ubuntu.com", 150 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 151 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 152 | "supplier": "Organization: Unknown", 153 | "description": "Installed via apt" 154 | }, 155 | { 156 | "name": "gnupg2", 157 | "SPDXID": "SPDXRef-Package-gnupg2", 158 | "versionInfo": "N/A", 159 | "downloadLocation": "apt.ubuntu.com", 160 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 161 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 162 | "supplier": "Organization: Unknown", 163 | "description": "Installed via apt" 164 | }, 165 | { 166 | "name": "inotify-tools", 167 | "SPDXID": "SPDXRef-Package-inotify-tools", 168 | "versionInfo": "N/A", 169 | "downloadLocation": "apt.ubuntu.com", 170 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 171 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 172 | "supplier": "Organization: Unknown", 173 | "description": "Installed via apt" 174 | }, 175 | { 176 | "name": "iputils-ping", 177 | "SPDXID": "SPDXRef-Package-iputils-ping", 178 | "versionInfo": "N/A", 179 | "downloadLocation": "apt.ubuntu.com", 180 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 181 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 182 | "supplier": "Organization: Unknown", 183 | "description": "Installed via apt" 184 | }, 185 | { 186 | "name": "jq", 187 | "SPDXID": "SPDXRef-Package-jq", 188 | "versionInfo": "N/A", 189 | "downloadLocation": "apt.ubuntu.com", 190 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 191 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 192 | "supplier": "Organization: Unknown", 193 | "description": "Installed via apt" 194 | }, 195 | { 196 | "name": "libbz2-dev", 197 | "SPDXID": "SPDXRef-Package-libbz2-dev", 198 | "versionInfo": "N/A", 199 | "downloadLocation": "apt.ubuntu.com", 200 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 201 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 202 | "supplier": "Organization: Unknown", 203 | "description": "Installed via apt" 204 | }, 205 | { 206 | "name": "libc6", 207 | "SPDXID": "SPDXRef-Package-libc6", 208 | "versionInfo": "N/A", 209 | "downloadLocation": "apt.ubuntu.com", 210 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 211 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 212 | "supplier": "Organization: Unknown", 213 | "description": "Installed via apt" 214 | }, 215 | { 216 | "name": "libc6-dev", 217 | "SPDXID": "SPDXRef-Package-libc6-dev", 218 | "versionInfo": "N/A", 219 | "downloadLocation": "apt.ubuntu.com", 220 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 221 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 222 | "supplier": "Organization: Unknown", 223 | "description": "Installed via apt" 224 | }, 225 | { 226 | "name": "libcurl4-openssl-dev", 227 | "SPDXID": "SPDXRef-Package-libcurl4-openssl-dev", 228 | "versionInfo": "N/A", 229 | "downloadLocation": "apt.ubuntu.com", 230 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 231 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 232 | "supplier": "Organization: Unknown", 233 | "description": "Installed via apt" 234 | }, 235 | { 236 | "name": "libdb-dev", 237 | "SPDXID": "SPDXRef-Package-libdb-dev", 238 | "versionInfo": "N/A", 239 | "downloadLocation": "apt.ubuntu.com", 240 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 241 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 242 | "supplier": "Organization: Unknown", 243 | "description": "Installed via apt" 244 | }, 245 | { 246 | "name": "libedit2", 247 | "SPDXID": "SPDXRef-Package-libedit2", 248 | "versionInfo": "N/A", 249 | "downloadLocation": "apt.ubuntu.com", 250 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 251 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 252 | "supplier": "Organization: Unknown", 253 | "description": "Installed via apt" 254 | }, 255 | { 256 | "name": "libffi-dev", 257 | "SPDXID": "SPDXRef-Package-libffi-dev", 258 | "versionInfo": "N/A", 259 | "downloadLocation": "apt.ubuntu.com", 260 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 261 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 262 | "supplier": "Organization: Unknown", 263 | "description": "Installed via apt" 264 | }, 265 | { 266 | "name": "libgcc-13-dev", 267 | "SPDXID": "SPDXRef-Package-libgcc-13-dev", 268 | "versionInfo": "N/A", 269 | "downloadLocation": "apt.ubuntu.com", 270 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 271 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 272 | "supplier": "Organization: Unknown", 273 | "description": "Installed via apt" 274 | }, 275 | { 276 | "name": "libgcc1", 277 | "SPDXID": "SPDXRef-Package-libgcc1", 278 | "versionInfo": "N/A", 279 | "downloadLocation": "apt.ubuntu.com", 280 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 281 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 282 | "supplier": "Organization: Unknown", 283 | "description": "Installed via apt" 284 | }, 285 | { 286 | "name": "libgdbm-compat-dev", 287 | "SPDXID": "SPDXRef-Package-libgdbm-compat-dev", 288 | "versionInfo": "N/A", 289 | "downloadLocation": "apt.ubuntu.com", 290 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 291 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 292 | "supplier": "Organization: Unknown", 293 | "description": "Installed via apt" 294 | }, 295 | { 296 | "name": "libgdbm-dev", 297 | "SPDXID": "SPDXRef-Package-libgdbm-dev", 298 | "versionInfo": "N/A", 299 | "downloadLocation": "apt.ubuntu.com", 300 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 301 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 302 | "supplier": "Organization: Unknown", 303 | "description": "Installed via apt" 304 | }, 305 | { 306 | "name": "libgdiplus", 307 | "SPDXID": "SPDXRef-Package-libgdiplus", 308 | "versionInfo": "N/A", 309 | "downloadLocation": "apt.ubuntu.com", 310 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 311 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 312 | "supplier": "Organization: Unknown", 313 | "description": "Installed via apt" 314 | }, 315 | { 316 | "name": "libgssapi-krb5-2", 317 | "SPDXID": "SPDXRef-Package-libgssapi-krb5-2", 318 | "versionInfo": "N/A", 319 | "downloadLocation": "apt.ubuntu.com", 320 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 321 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 322 | "supplier": "Organization: Unknown", 323 | "description": "Installed via apt" 324 | }, 325 | { 326 | "name": "liblzma-dev", 327 | "SPDXID": "SPDXRef-Package-liblzma-dev", 328 | "versionInfo": "N/A", 329 | "downloadLocation": "apt.ubuntu.com", 330 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 331 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 332 | "supplier": "Organization: Unknown", 333 | "description": "Installed via apt" 334 | }, 335 | { 336 | "name": "libncurses-dev", 337 | "SPDXID": "SPDXRef-Package-libncurses-dev", 338 | "versionInfo": "N/A", 339 | "downloadLocation": "apt.ubuntu.com", 340 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 341 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 342 | "supplier": "Organization: Unknown", 343 | "description": "Installed via apt" 344 | }, 345 | { 346 | "name": "libncursesw5-dev", 347 | "SPDXID": "SPDXRef-Package-libncursesw5-dev", 348 | "versionInfo": "N/A", 349 | "downloadLocation": "apt.ubuntu.com", 350 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 351 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 352 | "supplier": "Organization: Unknown", 353 | "description": "Installed via apt" 354 | }, 355 | { 356 | "name": "libnss3-dev", 357 | "SPDXID": "SPDXRef-Package-libnss3-dev", 358 | "versionInfo": "N/A", 359 | "downloadLocation": "apt.ubuntu.com", 360 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 361 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 362 | "supplier": "Organization: Unknown", 363 | "description": "Installed via apt" 364 | }, 365 | { 366 | "name": "libpq-dev", 367 | "SPDXID": "SPDXRef-Package-libpq-dev", 368 | "versionInfo": "N/A", 369 | "downloadLocation": "apt.ubuntu.com", 370 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 371 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 372 | "supplier": "Organization: Unknown", 373 | "description": "Installed via apt" 374 | }, 375 | { 376 | "name": "libpsl-dev", 377 | "SPDXID": "SPDXRef-Package-libpsl-dev", 378 | "versionInfo": "N/A", 379 | "downloadLocation": "apt.ubuntu.com", 380 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 381 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 382 | "supplier": "Organization: Unknown", 383 | "description": "Installed via apt" 384 | }, 385 | { 386 | "name": "libpython3-dev", 387 | "SPDXID": "SPDXRef-Package-libpython3-dev", 388 | "versionInfo": "N/A", 389 | "downloadLocation": "apt.ubuntu.com", 390 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 391 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 392 | "supplier": "Organization: Unknown", 393 | "description": "Installed via apt" 394 | }, 395 | { 396 | "name": "libreadline-dev", 397 | "SPDXID": "SPDXRef-Package-libreadline-dev", 398 | "versionInfo": "N/A", 399 | "downloadLocation": "apt.ubuntu.com", 400 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 401 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 402 | "supplier": "Organization: Unknown", 403 | "description": "Installed via apt" 404 | }, 405 | { 406 | "name": "libsqlite3-dev", 407 | "SPDXID": "SPDXRef-Package-libsqlite3-dev", 408 | "versionInfo": "N/A", 409 | "downloadLocation": "apt.ubuntu.com", 410 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 411 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 412 | "supplier": "Organization: Unknown", 413 | "description": "Installed via apt" 414 | }, 415 | { 416 | "name": "libssl-dev", 417 | "SPDXID": "SPDXRef-Package-libssl-dev", 418 | "versionInfo": "N/A", 419 | "downloadLocation": "apt.ubuntu.com", 420 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 421 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 422 | "supplier": "Organization: Unknown", 423 | "description": "Installed via apt" 424 | }, 425 | { 426 | "name": "libstdc++-13-dev", 427 | "SPDXID": "SPDXRef-Package-libstdc++-13-dev", 428 | "versionInfo": "N/A", 429 | "downloadLocation": "apt.ubuntu.com", 430 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 431 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 432 | "supplier": "Organization: Unknown", 433 | "description": "Installed via apt" 434 | }, 435 | { 436 | "name": "libunwind8", 437 | "SPDXID": "SPDXRef-Package-libunwind8", 438 | "versionInfo": "N/A", 439 | "downloadLocation": "apt.ubuntu.com", 440 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 441 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 442 | "supplier": "Organization: Unknown", 443 | "description": "Installed via apt" 444 | }, 445 | { 446 | "name": "libuuid1", 447 | "SPDXID": "SPDXRef-Package-libuuid1", 448 | "versionInfo": "N/A", 449 | "downloadLocation": "apt.ubuntu.com", 450 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 451 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 452 | "supplier": "Organization: Unknown", 453 | "description": "Installed via apt" 454 | }, 455 | { 456 | "name": "libxml2-dev", 457 | "SPDXID": "SPDXRef-Package-libxml2-dev", 458 | "versionInfo": "N/A", 459 | "downloadLocation": "apt.ubuntu.com", 460 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 461 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 462 | "supplier": "Organization: Unknown", 463 | "description": "Installed via apt" 464 | }, 465 | { 466 | "name": "libz3-dev", 467 | "SPDXID": "SPDXRef-Package-libz3-dev", 468 | "versionInfo": "N/A", 469 | "downloadLocation": "apt.ubuntu.com", 470 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 471 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 472 | "supplier": "Organization: Unknown", 473 | "description": "Installed via apt" 474 | }, 475 | { 476 | "name": "lsb-release", 477 | "SPDXID": "SPDXRef-Package-lsb-release", 478 | "versionInfo": "N/A", 479 | "downloadLocation": "apt.ubuntu.com", 480 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 481 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 482 | "supplier": "Organization: Unknown", 483 | "description": "Installed via apt" 484 | }, 485 | { 486 | "name": "make", 487 | "SPDXID": "SPDXRef-Package-make", 488 | "versionInfo": "N/A", 489 | "downloadLocation": "apt.ubuntu.com", 490 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 491 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 492 | "supplier": "Organization: Unknown", 493 | "description": "Installed via apt" 494 | }, 495 | { 496 | "name": "moreutils", 497 | "SPDXID": "SPDXRef-Package-moreutils", 498 | "versionInfo": "N/A", 499 | "downloadLocation": "apt.ubuntu.com", 500 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 501 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 502 | "supplier": "Organization: Unknown", 503 | "description": "Installed via apt" 504 | }, 505 | { 506 | "name": "nasm", 507 | "SPDXID": "SPDXRef-Package-nasm", 508 | "versionInfo": "N/A", 509 | "downloadLocation": "apt.ubuntu.com", 510 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 511 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 512 | "supplier": "Organization: Unknown", 513 | "description": "Installed via apt" 514 | }, 515 | { 516 | "name": "netcat-openbsd", 517 | "SPDXID": "SPDXRef-Package-netcat-openbsd", 518 | "versionInfo": "N/A", 519 | "downloadLocation": "apt.ubuntu.com", 520 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 521 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 522 | "supplier": "Organization: Unknown", 523 | "description": "Installed via apt" 524 | }, 525 | { 526 | "name": "ninja-build", 527 | "SPDXID": "SPDXRef-Package-ninja-build", 528 | "versionInfo": "N/A", 529 | "downloadLocation": "apt.ubuntu.com", 530 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 531 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 532 | "supplier": "Organization: Unknown", 533 | "description": "Installed via apt" 534 | }, 535 | { 536 | "name": "openjdk-${JAVA_VERSION}-jdk", 537 | "SPDXID": "SPDXRef-Package-openjdk-${JAVA_VERSION}-jdk", 538 | "versionInfo": "N/A", 539 | "downloadLocation": "apt.ubuntu.com", 540 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 541 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 542 | "supplier": "Organization: Unknown", 543 | "description": "Installed via apt" 544 | }, 545 | { 546 | "name": "openssh-client", 547 | "SPDXID": "SPDXRef-Package-openssh-client", 548 | "versionInfo": "N/A", 549 | "downloadLocation": "apt.ubuntu.com", 550 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 551 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 552 | "supplier": "Organization: Unknown", 553 | "description": "Installed via apt" 554 | }, 555 | { 556 | "name": "pkg-config", 557 | "SPDXID": "SPDXRef-Package-pkg-config", 558 | "versionInfo": "N/A", 559 | "downloadLocation": "apt.ubuntu.com", 560 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 561 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 562 | "supplier": "Organization: Unknown", 563 | "description": "Installed via apt" 564 | }, 565 | { 566 | "name": "protobuf-compiler", 567 | "SPDXID": "SPDXRef-Package-protobuf-compiler", 568 | "versionInfo": "N/A", 569 | "downloadLocation": "apt.ubuntu.com", 570 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 571 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 572 | "supplier": "Organization: Unknown", 573 | "description": "Installed via apt" 574 | }, 575 | { 576 | "name": "python3", 577 | "SPDXID": "SPDXRef-Package-python3", 578 | "versionInfo": "N/A", 579 | "downloadLocation": "apt.ubuntu.com", 580 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 581 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 582 | "supplier": "Organization: Unknown", 583 | "description": "Installed via apt" 584 | }, 585 | { 586 | "name": "python3-pip", 587 | "SPDXID": "SPDXRef-Package-python3-pip", 588 | "versionInfo": "N/A", 589 | "downloadLocation": "apt.ubuntu.com", 590 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 591 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 592 | "supplier": "Organization: Unknown", 593 | "description": "Installed via apt" 594 | }, 595 | { 596 | "name": "ripgrep", 597 | "SPDXID": "SPDXRef-Package-ripgrep", 598 | "versionInfo": "N/A", 599 | "downloadLocation": "apt.ubuntu.com", 600 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 601 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 602 | "supplier": "Organization: Unknown", 603 | "description": "Installed via apt" 604 | }, 605 | { 606 | "name": "rsync", 607 | "SPDXID": "SPDXRef-Package-rsync", 608 | "versionInfo": "N/A", 609 | "downloadLocation": "apt.ubuntu.com", 610 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 611 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 612 | "supplier": "Organization: Unknown", 613 | "description": "Installed via apt" 614 | }, 615 | { 616 | "name": "ruby-full", 617 | "SPDXID": "SPDXRef-Package-ruby-full", 618 | "versionInfo": "N/A", 619 | "downloadLocation": "apt.ubuntu.com", 620 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 621 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 622 | "supplier": "Organization: Unknown", 623 | "description": "Installed via apt" 624 | }, 625 | { 626 | "name": "sh -s -- -y --profile minimal", 627 | "SPDXID": "SPDXRef-Package-sh_-s_--_-y_--profile_minimal", 628 | "versionInfo": "N/A", 629 | "downloadLocation": "apt.ubuntu.com", 630 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 631 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 632 | "supplier": "Organization: Unknown", 633 | "description": "Installed via apt" 634 | }, 635 | { 636 | "name": "software-properties-common", 637 | "SPDXID": "SPDXRef-Package-software-properties-common", 638 | "versionInfo": "N/A", 639 | "downloadLocation": "apt.ubuntu.com", 640 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 641 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 642 | "supplier": "Organization: Unknown", 643 | "description": "Installed via apt" 644 | }, 645 | { 646 | "name": "sqlite3", 647 | "SPDXID": "SPDXRef-Package-sqlite3", 648 | "versionInfo": "N/A", 649 | "downloadLocation": "apt.ubuntu.com", 650 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 651 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 652 | "supplier": "Organization: Unknown", 653 | "description": "Installed via apt" 654 | }, 655 | { 656 | "name": "sudo", 657 | "SPDXID": "SPDXRef-Package-sudo", 658 | "versionInfo": "N/A", 659 | "downloadLocation": "apt.ubuntu.com", 660 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 661 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 662 | "supplier": "Organization: Unknown", 663 | "description": "Installed via apt" 664 | }, 665 | { 666 | "name": "swig3.0", 667 | "SPDXID": "SPDXRef-Package-swig3.0", 668 | "versionInfo": "N/A", 669 | "downloadLocation": "apt.ubuntu.com", 670 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 671 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 672 | "supplier": "Organization: Unknown", 673 | "description": "Installed via apt" 674 | }, 675 | { 676 | "name": "tk-dev", 677 | "SPDXID": "SPDXRef-Package-tk-dev", 678 | "versionInfo": "N/A", 679 | "downloadLocation": "apt.ubuntu.com", 680 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 681 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 682 | "supplier": "Organization: Unknown", 683 | "description": "Installed via apt" 684 | }, 685 | { 686 | "name": "tzdata", 687 | "SPDXID": "SPDXRef-Package-tzdata", 688 | "versionInfo": "N/A", 689 | "downloadLocation": "apt.ubuntu.com", 690 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 691 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 692 | "supplier": "Organization: Unknown", 693 | "description": "Installed via apt" 694 | }, 695 | { 696 | "name": "unixodbc-dev", 697 | "SPDXID": "SPDXRef-Package-unixodbc-dev", 698 | "versionInfo": "N/A", 699 | "downloadLocation": "apt.ubuntu.com", 700 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 701 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 702 | "supplier": "Organization: Unknown", 703 | "description": "Installed via apt" 704 | }, 705 | { 706 | "name": "unzip", 707 | "SPDXID": "SPDXRef-Package-unzip", 708 | "versionInfo": "N/A", 709 | "downloadLocation": "apt.ubuntu.com", 710 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 711 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 712 | "supplier": "Organization: Unknown", 713 | "description": "Installed via apt" 714 | }, 715 | { 716 | "name": "uuid-dev", 717 | "SPDXID": "SPDXRef-Package-uuid-dev", 718 | "versionInfo": "N/A", 719 | "downloadLocation": "apt.ubuntu.com", 720 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 721 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 722 | "supplier": "Organization: Unknown", 723 | "description": "Installed via apt" 724 | }, 725 | { 726 | "name": "wget", 727 | "SPDXID": "SPDXRef-Package-wget", 728 | "versionInfo": "N/A", 729 | "downloadLocation": "apt.ubuntu.com", 730 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 731 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 732 | "supplier": "Organization: Unknown", 733 | "description": "Installed via apt" 734 | }, 735 | { 736 | "name": "xz-utils", 737 | "SPDXID": "SPDXRef-Package-xz-utils", 738 | "versionInfo": "N/A", 739 | "downloadLocation": "apt.ubuntu.com", 740 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 741 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 742 | "supplier": "Organization: Unknown", 743 | "description": "Installed via apt" 744 | }, 745 | { 746 | "name": "yasm", 747 | "SPDXID": "SPDXRef-Package-yasm", 748 | "versionInfo": "N/A", 749 | "downloadLocation": "apt.ubuntu.com", 750 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 751 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 752 | "supplier": "Organization: Unknown", 753 | "description": "Installed via apt" 754 | }, 755 | { 756 | "name": "zip", 757 | "SPDXID": "SPDXRef-Package-zip", 758 | "versionInfo": "N/A", 759 | "downloadLocation": "apt.ubuntu.com", 760 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 761 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 762 | "supplier": "Organization: Unknown", 763 | "description": "Installed via apt" 764 | }, 765 | { 766 | "name": "zlib1g", 767 | "SPDXID": "SPDXRef-Package-zlib1g", 768 | "versionInfo": "N/A", 769 | "downloadLocation": "apt.ubuntu.com", 770 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 771 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 772 | "supplier": "Organization: Unknown", 773 | "description": "Installed via apt" 774 | }, 775 | { 776 | "name": "zlib1g-dev", 777 | "SPDXID": "SPDXRef-Package-zlib1g-dev", 778 | "versionInfo": "N/A", 779 | "downloadLocation": "apt.ubuntu.com", 780 | "licenseConcluded": "Varies (Debian/Ubuntu ecosystem)", 781 | "licenseDeclared": "Varies (Debian/Ubuntu ecosystem)", 782 | "supplier": "Organization: Unknown", 783 | "description": "Installed via apt" 784 | }, 785 | { 786 | "name": "bun", 787 | "SPDXID": "SPDXRef-Package-bun", 788 | "versionInfo": "1.2.10", 789 | "downloadLocation": "https://github.com/oven-sh/bun", 790 | "licenseConcluded": "MIT", 791 | "licenseDeclared": "MIT", 792 | "supplier": "Organization: Unknown", 793 | "description": "Installed via curl+unzip" 794 | }, 795 | { 796 | "name": "go", 797 | "SPDXID": "SPDXRef-Package-go", 798 | "versionInfo": "1.23.8", 799 | "downloadLocation": "https://golang.org/dl/", 800 | "licenseConcluded": "BSD-3-Clause", 801 | "licenseDeclared": "BSD-3-Clause", 802 | "supplier": "Organization: Unknown", 803 | "description": "Installed via curl+tar" 804 | }, 805 | { 806 | "name": "gradle", 807 | "SPDXID": "SPDXRef-Package-gradle", 808 | "versionInfo": "8.14", 809 | "downloadLocation": "https://services.gradle.org", 810 | "licenseConcluded": "Apache-2.0", 811 | "licenseDeclared": "Apache-2.0", 812 | "supplier": "Organization: Unknown", 813 | "description": "Installed via curl+unzip" 814 | }, 815 | { 816 | "name": "bazelisk", 817 | "SPDXID": "SPDXRef-Package-bazelisk", 818 | "versionInfo": "1.26.0", 819 | "downloadLocation": "https://github.com/bazelbuild/bazelisk", 820 | "licenseConcluded": "Apache-2.0", 821 | "licenseDeclared": "Apache-2.0", 822 | "supplier": "Organization: Unknown", 823 | "description": "Installed via curl" 824 | }, 825 | { 826 | "name": "swift", 827 | "SPDXID": "SPDXRef-Package-swift", 828 | "versionInfo": "6.1", 829 | "downloadLocation": "https://swift.org", 830 | "licenseConcluded": "Apache-2.0", 831 | "licenseDeclared": "Apache-2.0", 832 | "supplier": "Organization: Unknown", 833 | "description": "Installed via swiftly script" 834 | }, 835 | { 836 | "name": "llvm", 837 | "SPDXID": "SPDXRef-Package-llvm", 838 | "versionInfo": "latest", 839 | "downloadLocation": "https://apt.llvm.org/llvm.sh", 840 | "licenseConcluded": "Apache-2.0 with LLVM exceptions", 841 | "licenseDeclared": "Apache-2.0 with LLVM exceptions", 842 | "supplier": "Organization: Unknown", 843 | "description": "Installed via custom script" 844 | }, 845 | { 846 | "name": "pyenv", 847 | "SPDXID": "SPDXRef-Package-pyenv", 848 | "versionInfo": "v2.5.5", 849 | "downloadLocation": "https://github.com/pyenv/pyenv", 850 | "licenseConcluded": "MIT", 851 | "licenseDeclared": "MIT", 852 | "supplier": "Organization: Unknown", 853 | "description": "Installed via git clone" 854 | }, 855 | { 856 | "name": "nvm", 857 | "SPDXID": "SPDXRef-Package-nvm", 858 | "versionInfo": "v0.40.2", 859 | "downloadLocation": "https://github.com/nvm-sh/nvm", 860 | "licenseConcluded": "MIT", 861 | "licenseDeclared": "MIT", 862 | "supplier": "Organization: Unknown", 863 | "description": "Installed via git clone" 864 | }, 865 | { 866 | "name": "Python", 867 | "SPDXID": "SPDXRef-Package-Python", 868 | "versionInfo": "3.10, 3.11.12, 3.12, 3.13", 869 | "downloadLocation": "https://www.python.org", 870 | "licenseConcluded": "Python-2.0", 871 | "licenseDeclared": "Python-2.0", 872 | "supplier": "Organization: Unknown", 873 | "description": "Installed via pyenv" 874 | }, 875 | { 876 | "name": "Node.js", 877 | "SPDXID": "SPDXRef-Package-Node.js", 878 | "versionInfo": "18, 20, 22", 879 | "downloadLocation": "https://nodejs.org", 880 | "licenseConcluded": "MIT", 881 | "licenseDeclared": "MIT", 882 | "supplier": "Organization: Unknown", 883 | "description": "Installed via nvm" 884 | }, 885 | { 886 | "name": "Java", 887 | "SPDXID": "SPDXRef-Package-Java", 888 | "versionInfo": "OpenJDK 21", 889 | "downloadLocation": "https://openjdk.org", 890 | "licenseConcluded": "GPL-2.0 with Classpath Exception", 891 | "licenseDeclared": "GPL-2.0 with Classpath Exception", 892 | "supplier": "Organization: Unknown", 893 | "description": "Installed via apt" 894 | }, 895 | { 896 | "name": "Ruby", 897 | "SPDXID": "SPDXRef-Package-Ruby", 898 | "versionInfo": "system default", 899 | "downloadLocation": "https://www.ruby-lang.org", 900 | "licenseConcluded": "Ruby / BSD dual-license", 901 | "licenseDeclared": "Ruby / BSD dual-license", 902 | "supplier": "Organization: Unknown", 903 | "description": "Installed via apt" 904 | }, 905 | { 906 | "name": "Rust", 907 | "SPDXID": "SPDXRef-Package-Rust", 908 | "versionInfo": "stable", 909 | "downloadLocation": "https://www.rust-lang.org", 910 | "licenseConcluded": "MIT OR Apache-2.0", 911 | "licenseDeclared": "MIT OR Apache-2.0", 912 | "supplier": "Organization: Unknown", 913 | "description": "Installed via rustup" 914 | }, 915 | { 916 | "name": "poetry", 917 | "SPDXID": "SPDXRef-Package-poetry", 918 | "versionInfo": "latest", 919 | "downloadLocation": "https://python-poetry.org", 920 | "licenseConcluded": "MIT", 921 | "licenseDeclared": "MIT", 922 | "supplier": "Organization: Unknown", 923 | "description": "Installed via pipx" 924 | }, 925 | { 926 | "name": "uv", 927 | "SPDXID": "SPDXRef-Package-uv", 928 | "versionInfo": "latest", 929 | "downloadLocation": "https://pypi.org/project/uv", 930 | "licenseConcluded": "MIT", 931 | "licenseDeclared": "MIT", 932 | "supplier": "Organization: Unknown", 933 | "description": "Installed via pipx" 934 | }, 935 | { 936 | "name": "ruff", 937 | "SPDXID": "SPDXRef-Package-ruff", 938 | "versionInfo": "latest", 939 | "downloadLocation": "https://pypi.org/project/ruff", 940 | "licenseConcluded": "MIT", 941 | "licenseDeclared": "MIT", 942 | "supplier": "Organization: Unknown", 943 | "description": "Installed via pip" 944 | }, 945 | { 946 | "name": "black", 947 | "SPDXID": "SPDXRef-Package-black", 948 | "versionInfo": "latest", 949 | "downloadLocation": "https://pypi.org/project/black", 950 | "licenseConcluded": "MIT", 951 | "licenseDeclared": "MIT", 952 | "supplier": "Organization: Unknown", 953 | "description": "Installed via pip" 954 | }, 955 | { 956 | "name": "mypy", 957 | "SPDXID": "SPDXRef-Package-mypy", 958 | "versionInfo": "latest", 959 | "downloadLocation": "https://pypi.org/project/mypy", 960 | "licenseConcluded": "MIT", 961 | "licenseDeclared": "MIT", 962 | "supplier": "Organization: Unknown", 963 | "description": "Installed via pip" 964 | }, 965 | { 966 | "name": "pyright", 967 | "SPDXID": "SPDXRef-Package-pyright", 968 | "versionInfo": "latest", 969 | "downloadLocation": "https://pypi.org/project/pyright", 970 | "licenseConcluded": "MIT", 971 | "licenseDeclared": "MIT", 972 | "supplier": "Organization: Unknown", 973 | "description": "Installed via pip" 974 | }, 975 | { 976 | "name": "isort", 977 | "SPDXID": "SPDXRef-Package-isort", 978 | "versionInfo": "latest", 979 | "downloadLocation": "https://pypi.org/project/isort", 980 | "licenseConcluded": "MIT", 981 | "licenseDeclared": "MIT", 982 | "supplier": "Organization: Unknown", 983 | "description": "Installed via pip" 984 | }, 985 | { 986 | "name": "yarn", 987 | "SPDXID": "SPDXRef-Package-yarn", 988 | "versionInfo": "latest", 989 | "downloadLocation": "https://yarnpkg.com", 990 | "licenseConcluded": "BSD-2-Clause", 991 | "licenseDeclared": "BSD-2-Clause", 992 | "supplier": "Organization: Unknown", 993 | "description": "Installed via corepack" 994 | }, 995 | { 996 | "name": "pnpm", 997 | "SPDXID": "SPDXRef-Package-pnpm", 998 | "versionInfo": "latest", 999 | "downloadLocation": "https://pnpm.io", 1000 | "licenseConcluded": "MIT", 1001 | "licenseDeclared": "MIT", 1002 | "supplier": "Organization: Unknown", 1003 | "description": "Installed via corepack" 1004 | }, 1005 | { 1006 | "name": "npm", 1007 | "SPDXID": "SPDXRef-Package-npm", 1008 | "versionInfo": "latest", 1009 | "downloadLocation": "https://www.npmjs.com", 1010 | "licenseConcluded": "Artistic-2.0", 1011 | "licenseDeclared": "Artistic-2.0", 1012 | "supplier": "Organization: Unknown", 1013 | "description": "Installed via corepack" 1014 | } 1015 | ] 1016 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # codex-universal 2 | 3 | `codex-universal` is a reference implementation of the base Docker image available in [OpenAI Codex](http://platform.openai.com/docs/codex). 4 | 5 | This repository is intended to help developers cutomize environments in Codex, by providing a similar image that can be pulled and run locally. This is not an identical environment but should help for debugging and development. 6 | 7 | For more details on environment setup, see [OpenAI Codex](http://platform.openai.com/docs/codex). 8 | 9 | ## Usage 10 | 11 | The Docker image is available at: 12 | 13 | ``` 14 | docker pull ghcr.io/openai/codex-universal:latest 15 | ``` 16 | 17 | The below script shows how can you approximate the `setup` environment in Codex: 18 | 19 | ```sh 20 | # See below for environment variable options. 21 | # This script mounts the current directory similar to how it would get cloned in. 22 | docker run --rm -it \ 23 | -e CODEX_ENV_PYTHON_VERSION=3.12 \ 24 | -e CODEX_ENV_NODE_VERSION=20 \ 25 | -e CODEX_ENV_RUST_VERSION=1.87.0 \ 26 | -e CODEX_ENV_GO_VERSION=1.23.8 \ 27 | -e CODEX_ENV_SWIFT_VERSION=6.1 \ 28 | -v $(pwd):/workspace/$(basename $(pwd)) -w /workspace/$(basename $(pwd)) \ 29 | ghcr.io/openai/codex-universal:latest 30 | ``` 31 | 32 | `codex-universal` includes setup scripts that look for `CODEX_ENV_*` environment variables and configures the language version accordingly. 33 | 34 | ### Configuring language runtimes 35 | 36 | The following environment variables can be set to configure runtime installation. Note that a limited subset of versions are supported (indicated in the table below): 37 | 38 | | Environment variable | Description | Supported versions | Additional packages | 39 | | -------------------------- | -------------------------- | ------------------------------------------------ | -------------------------------------------------------------------- | 40 | | `CODEX_ENV_PYTHON_VERSION` | Python version to install | `3.10`, `3.11.12`, `3.12`, `3.13` | `pyenv`, `poetry`, `uv`, `ruff`, `black`, `mypy`, `pyright`, `isort` | 41 | | `CODEX_ENV_NODE_VERSION` | Node.js version to install | `18`, `20`, `22` | `corepack`, `yarn`, `pnpm`, `npm` | 42 | | `CODEX_ENV_RUST_VERSION` | Rust version to install | `1.83.0`, `1.84.1`, `1.85.1`, `1.86.0`, `1.87.0` | | 43 | | `CODEX_ENV_GO_VERSION` | Go version to install | `1.22.12`, `1.23.8`, `1.24.3` | | 44 | | `CODEX_ENV_SWIFT_VERSION` | Swift version to install | `5.10`, `6.1` | | 45 | 46 | ## What's included 47 | 48 | In addition to the packages specified in the table above, the following packages are also installed: 49 | 50 | - `ruby`: 3.2.3 51 | - `bun`: 1.2.10 52 | - `java`: 21 53 | - `bazelisk` / `bazel` 54 | 55 | See [Dockerfile](Dockerfile) for the full details of installed packages. 56 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "==================================" 4 | echo "Welcome to openai/codex-universal!" 5 | echo "==================================" 6 | 7 | /opt/codex/setup_universal.sh 8 | 9 | echo "Environment ready. Dropping you into a bash shell." 10 | exec bash --login "$@" 11 | -------------------------------------------------------------------------------- /setup_universal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash --login 2 | 3 | set -euo pipefail 4 | 5 | CODEX_ENV_PYTHON_VERSION=${CODEX_ENV_PYTHON_VERSION:-} 6 | CODEX_ENV_NODE_VERSION=${CODEX_ENV_NODE_VERSION:-} 7 | CODEX_ENV_RUST_VERSION=${CODEX_ENV_RUST_VERSION:-} 8 | CODEX_ENV_GO_VERSION=${CODEX_ENV_GO_VERSION:-} 9 | CODEX_ENV_SWIFT_VERSION=${CODEX_ENV_SWIFT_VERSION:-} 10 | 11 | echo "Configuring language runtimes..." 12 | 13 | # For Python and Node, always run the install commands so we can install 14 | # global libraries for linting and formatting. This just switches the version. 15 | 16 | # For others (e.g. rust), to save some time on bootup we only install other language toolchains 17 | # if the versions differ. 18 | 19 | if [ -n "${CODEX_ENV_PYTHON_VERSION}" ]; then 20 | echo "# Python: ${CODEX_ENV_PYTHON_VERSION}" 21 | pyenv global "${CODEX_ENV_PYTHON_VERSION}" 22 | fi 23 | 24 | if [ -n "${CODEX_ENV_NODE_VERSION}" ]; then 25 | echo "# Node.js: ${CODEX_ENV_NODE_VERSION}" 26 | nvm alias default "${CODEX_ENV_NODE_VERSION}" 27 | nvm use "${CODEX_ENV_NODE_VERSION}" 28 | corepack enable 29 | corepack install -g yarn pnpm npm 30 | fi 31 | 32 | if [ -n "${CODEX_ENV_RUST_VERSION}" ]; then 33 | current=$(rustc --version | awk '{print $2}') # ==> 1.86.0 34 | echo "# Rust: ${CODEX_ENV_RUST_VERSION} (default: ${current})" 35 | if [ "${current}" != "${CODEX_ENV_RUST_VERSION}" ]; then 36 | rustup toolchain install --no-self-update "${CODEX_ENV_RUST_VERSION}" 37 | rustup default "${CODEX_ENV_RUST_VERSION}" 38 | # Pre-install common linters/formatters 39 | # clippy is already installed 40 | fi 41 | fi 42 | 43 | if [ -n "${CODEX_ENV_GO_VERSION}" ]; then 44 | current=$(go version | awk '{print $3}') # ==> go1.23.8 45 | echo "# Go: go${CODEX_ENV_GO_VERSION} (default: ${current})" 46 | if [ "${current}" != "go${CODEX_ENV_GO_VERSION}" ]; then 47 | go install "golang.org/dl/go${CODEX_ENV_GO_VERSION}@latest" 48 | "go${CODEX_ENV_GO_VERSION}" download 49 | # Place new go first in PATH 50 | echo "export PATH=$("go${CODEX_ENV_GO_VERSION}" env GOROOT)/bin:\$PATH" >> /etc/profile 51 | # Pre-install common linters/formatters 52 | golangci-lint --version # Already installed in base image, save us some bootup time 53 | fi 54 | fi 55 | 56 | if [ -n "${CODEX_ENV_SWIFT_VERSION}" ]; then 57 | current=$(swift --version | awk -F'version ' '{print $2}' | awk '{print $1}') # ==> 6.1 58 | echo "# Swift: ${CODEX_ENV_SWIFT_VERSION} (default: ${current})" 59 | if [ "${current}" != "${CODEX_ENV_SWIFT_VERSION}" ]; then 60 | swiftly install --use "${CODEX_ENV_SWIFT_VERSION}" 61 | fi 62 | fi 63 | --------------------------------------------------------------------------------