osv.dev
Author: Ludovic HENRY ludovic.henry@qti.qualcomm.com
Date: 2026-06-17
Scope: RISC-V (riscv64/linux) support status for osv.dev
Audience: Technical leadership, resource allocation strategy
Verification policy: Every claim is cross-referenced to a primary upstream source. Items that could not be verified against a second source are marked [NEEDS VERIFICATION].
1. Project Overview
osv.dev is a vulnerability database and API service operated by Google. It aggregates security advisories for open-source packages across ecosystems including npm, PyPI, Go, Debian, Ubuntu, Android, and Alpine Linux. The service exposes a public REST/gRPC API and a web UI; backend components are written in Python and Go and run entirely on Google Cloud Platform (GCS, Cloud Datastore, Cloud Functions, Cloud Build, Terraform).
The project is composed of three public repositories:
- google/osv.dev – web service, API server, ingestion workers, infrastructure
- google/osv-scanner – CLI tool for scanning a project’s dependencies against the OSV database
- google/osv-scalibr – Go library and CLI for software inventory and vulnerability extraction
The OSV advisory schema is an OpenSSF specification, listed as “TBD” lifecycle stage on the OpenSSF projects page.
Governance: Google-internal. No independent foundation. No CODEOWNERS or MAINTAINERS file in the repo root. Contributors must sign Google’s CLA. All PRs require review before merge.
Corporate maintainers (all @google.com): Andrew Pollock, Oliver Chang, Michael Kedar (most frequent recent committer), Xueqin Cui, Joey Lau, Jess Lowe, Rex P. External contributors include Szymon Drosdzol (Doyensec), westonsteimel, G-Rath, hayleycd.
RISE membership: Google LLC is a RISE Premier Member. osv.dev is not a RISE focus project; no RISE blog posts, no RISE wheel builder entries, and no RISE GitLab repositories reference osv.dev, osv-scanner, or osv-scalibr.
License: Apache 2.0. Repo created 2021-01-08. 2,900 stars, 354 forks as of the research date.
Community posture on new ports: Not applicable in the traditional sense. osv.dev is a hosted web service; architecture portability is only relevant for osv-scanner and osv-scalibr, which are Go binaries. No community discussion or issue requesting riscv64 support has ever been filed in any of the three repositories.
2. Port History and Upstreaming Timeline
| Date | Event | Source |
|---|---|---|
| 2021-01-08 | Repository created | github.com/google/osv.dev |
| 2026-06-17 | No riscv64 activity of any kind in any of the three repos | GitHub issue/PR/commit search, all returning 0 results |
No RISC-V port has been attempted. No contributor has submitted a patch, issue, or discussion item related to riscv64 in google/osv.dev, google/osv-scanner, or google/osv-scalibr. The six riscv64-like strings in the google/osv.dev codebase are all in auto-generated poetry.lock files, where they appear as substrings of third-party wheel filenames (e.g. charset_normalizer-3.5.1-...-manylinux_2_31_riscv64.whl). They are dependency metadata, not project code.
3. Upstream Support Tier
There is no formal tier policy for osv.dev, osv-scanner, or osv-scalibr. The evidence across all three repos is consistent:
| Signal | amd64 | arm64 | riscv64 |
|---|---|---|---|
| CI testing | Yes (all workflows on ubuntu-latest) |
No | No |
| Release binary (osv-scanner) | Yes | Yes | No |
| Release binary (osv-scalibr) | No (no binaries at all) | No | No |
| Release binary (osv.dev) | No (no binaries at all) | No | No |
| Official support statement | Implied by CI and release | Implied by release binary | Not mentioned anywhere |
osv-scanner v2.5.1 (.goreleaser.yml) explicitly lists GOARCH: [amd64, arm64]. The file contains a comment that arm was added after further testing; riscv64 does not appear anywhere in the file. The goreleaser config for osv-scanner ships binaries for darwin/amd64, darwin/arm64, linux/amd64, linux/arm64, windows/amd64, and windows/arm64. No linux/riscv64 binary has ever been released.
4. Technical Architecture and RISC-V-Specific Subsystems
osv.dev has no architecture-specific code in any of its three repositories. There are no:
- Go build-constraint files (
//go:build riscv64,//go:build arm64, or any arch tag) - C or assembly source files of any kind
- SIMD, vectorization, JIT, or cryptographic acceleration code
- Per-architecture dispatch layers
- CGO usage in any of the three repos (all Go services build with
CGO_ENABLED=0)
The two build constraint tags present in the Go source (//go:build embedstatic and //go:build !embedstatic) are feature flags controlling whether static web assets are compiled into the binary at build time. They have no relation to CPU architecture.
| Component | amd64 arch-specific code | arm64 arch-specific code | riscv64 arch-specific code |
|---|---|---|---|
| API server (Go) | None | None | None |
| Python workers | None | None | None |
| Vulnerability ingestion pipeline | None | None | None |
| osv-scanner CLI (Go) | None | None | None |
| osv-scalibr library (Go) | None | None | None |
| SIMD/vectorization | None | None | None |
| JIT or crypto acceleration | None | None | None |
The concept of “riscv64 implementation completeness relative to amd64 or arm64” does not apply. The project has no per-arch code for any architecture. It is a portable Go/Python web service. Correct operation on riscv64 requires only that the standard Go and Python runtimes support riscv64, which they do.
5. Build System, Cross-Compilation, and Toolchain
Go services (go/Dockerfile):
FROM golang:1.26.5-alpine AS builder
ENV CGO_ENABLED=0
RUN go build -o /app/<service> ./cmd/<service>/
FROM gcr.io/distroless/static-debian12
GOARCH is not set in the Dockerfile. The build uses the host architecture (amd64 in CI). Cross-compiling for riscv64 requires only adding GOARCH=riscv64 to the build environment or passing --platform linux/riscv64 to docker build. No code changes are required.
go.mod requires Go 1.26.5. Go has shipped linux/riscv64 as a supported target since Go 1.14; Go 1.26.5 fully supports riscv64.
Python worker-base (docker/worker-base/Dockerfile):
Base image is ubuntu:26.04. Python 3.13.3 is compiled from source with ./configure --enable-optimizations --with-lto. The apt source line hardcodes arch=amd64 for docker-ce. No --platform argument or architecture abstraction is present.
Toolchain requirements from CONTRIBUTING.md and CI workflows:
- Go >= 1.26 (go.mod pins 1.26.5)
- Python 3.13
- Poetry >= 2.3.3
- Node.js >= 18.17.x
- protoc (protobuf-compiler)
Known build failures on riscv64: None documented. No one has attempted a riscv64 build.
QEMU usage: None in any of the 14 CI workflow files.
6. Feature Coverage and Gap Analysis vs arm64 and amd64
osv.dev has no riscv64-specific feature gaps in terms of functionality, because the project has no architecture-specific features for any architecture. The service is fully portable by design.
The practical gaps for a user who wants to run osv-scanner or osv-scalibr on a riscv64 machine are:
| Item | amd64 | arm64 | riscv64 |
|---|---|---|---|
| Prebuilt osv-scanner binary | Yes (official release) | Yes (official release) | No (must build from source) |
| Prebuilt osv-scalibr binary | No | No | No |
| PyPI grpcio binary wheel | Yes | Yes | No (build from source required) |
| PyPI protobuf C extension wheel | Yes | Yes | No (pure-Python fallback available) |
| Python services deployable on GKE | Yes | No (GKE riscv64 not available) | No (GKE riscv64 not available) |
| Functional correctness | Yes | Yes | Expected yes (pure Go/Python; no known blockers) |
Security hardening gaps: Data not available: no source documents security hardening differences by architecture for this project.
Floating-point or NaN semantics issues: None found. The project does no floating-point computation in its core logic.
7. CI/CD Infrastructure
All 14 workflow files in .github/workflows/ of google/osv.dev were read in full:
codeql-analysis.yml, docs-deploy.yml, generate-protos.yml, go-generate.yml, issue-signposting.yml, links.yml, lint.yaml, osv-scanner-unified.yml, renovate-validator.yml, scorecards.yml, snapshots.yml, staleness.yml, title.yml, zizmor.yml
No .gitlab-ci.yml, Jenkinsfile, or .cirrus.yml exist in the repo.
Every workflow that specifies a runner uses runs-on: ubuntu-latest, which is GitHub’s standard x86_64-hosted runner. The osv-scanner-unified.yml workflow delegates to a reusable workflow (google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@nightly) for security scanning; it is not a build or test workflow and contains no architecture targeting.
Zero occurrences of “riscv”, “riscv64”, “linux/riscv”, or “qemu” appear in any workflow file.
| CI capability | amd64 | arm64 | riscv64 |
|---|---|---|---|
| Build | Yes | No | No |
| Unit tests | Yes | No | No |
| Integration tests | Yes | No | No |
| Release gating | Yes | No (arm64 built but not CI-tested) | No |
| QEMU emulation | No | No | No |
| RISE-provided runner | No | No | No |
8. Distribution and Release Status
GitHub releases (google/osv.dev): 17 releases (v0.0.5 through v0.1.3), every one has zero attached binary assets. This project does not distribute binaries via GitHub releases.
GitHub releases (google/osv-scanner): v2.5.1 ships binaries for linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64, windows/arm64. No linux/riscv64 binary.
GitHub releases (google/osv-scalibr): v0.5.2 has zero attached binary assets across all 26 releases. Distributed as a Go library and source-compiled CLI only.
PyPI (osv package): All 25 versions (0.0.1a0 through 0.1.3) ship only py3-none-any.whl – pure Python, no compiled extension, no platform-specific build. The package is classified as Development Status 7 - Inactive (archived, no longer maintained). Requires Python >=3.13,<4.0. The any wheel will install on riscv64 if the Python version requirement is met, without a dedicated riscv64 wheel.
PyPI (osv-dev package): Does not exist on PyPI (HTTP 404).
Ubuntu 24.04 Noble: No package named osv, osv-dev, or python3-osv in Ubuntu Noble.
Debian: No package named osv, python-osv, or python3-osv in Debian (tracker returns 404 for all three paths).
Arch Linux RISC-V (archriscv.felixc.at): No osv or osv-dev package found.
What a user must do to get a working binary on riscv64:
For osv-scanner: GOOS=linux GOARCH=riscv64 go build ./cmd/osv-scanner/ from the source tree. Requires Go >= 1.26. No code changes needed.
For Python services (osv.dev workers): Install grpcio from source (requires protobuf, abseil, and boringssl native toolchains), or use distro-packaged grpcio if available. protobuf Python will use the pure-Python fallback wheel.
9. Dependencies
Summary Table
| Name | Role | riscv64 Build | riscv64 Test | riscv64 Release | Notes |
|---|---|---|---|---|---|
| Go runtime (1.26.5) | All Go services | Yes | Yes (official) | Yes (official) | Full riscv64 support since Go 1.14 |
| grpcio (Python) | RPC transport, Python workers | Builds from source | No upstream riscv64 CI | No prebuilt PyPI wheel | Issue #41591 closed 2026-07-15 without commitment; build from source or use distro package |
| grpcio-tools (Python) | Protobuf codegen (dev) | Builds from source | No upstream riscv64 CI | No prebuilt PyPI wheel | Same gap as grpcio |
| protobuf (Python, >=6.33.6) | Wire format, Python workers | Pure-Python fallback only | Unknown | py3-none-any.whl only; no C extension wheel |
PR #12244 closed without merge 2024-03; functional but slower than C extension |
| pygit2 (>=1.14.0) | Git repo access, Python workers | Yes | Yes (upstream CI) | Full riscv64 wheels on PyPI (manylinux/musllinux) | No blockers |
| charset-normalizer (transitive) | Text encoding, via requests | Yes | Unknown | Full riscv64 wheels on PyPI | No blockers |
| requests (>=2.33) | HTTP client | Pure Python | N/A | py3-none-any.whl |
No blockers |
| google-cloud-ndb/pubsub/storage/logging | GCP services | Pure Python | N/A | py3-none-any.whl |
Depends on grpcio for transport; grpcio wheel gap applies |
| jsonschema (>=4.0) | OSV schema validation | Pure Python | N/A | py3-none-any.whl |
No blockers |
| google.golang.org/grpc (v1.82.1) | Go gRPC runtime | Yes (pure Go) | No riscv64 CI | Library only | No issues; distinct from Python grpcio C extension |
| google.golang.org/protobuf (v1.36.12) | Go protobuf runtime | Yes (pure Go) | No riscv64 CI | Library only | No issues |
| google/osv-scalibr (v0.4.5) | Vulnerability scanner library | Yes (pure Go) | No riscv64 CI | No binary releases | No riscv64-specific code |
| klauspost/compress (v1.19.0) | ZSTD/gzip/snappy, Go services | Yes (pure Go fallback) | No riscv64 CI | Library only | No riscv64 asm; falls back to pure Go |
| klauspost/cpuid (transitive) | CPU feature detection | Yes | Unknown | Library only | Issue #158 (riscv64 support) closed 2026-06-16 |
| cloudflare/circl (v1.6.3) | Post-quantum and ECC crypto | Yes (pure Go fallback) | No riscv64 CI | Library only | No riscv64 asm; pure Go paths used |
| go-git/go-git (v6) | Git operations, Go services | Yes (pure Go) | No riscv64 CI | Library only | No blockers |
| redis/go-redis (v9) | Redis client, vulnfeeds | Yes (pure Go) | N/A | Library only | No blockers |
| go.opentelemetry.io/otel (v1.44.0) | Distributed tracing | Yes (pure Go) | No riscv64 CI | Library only | No blockers |
| osv-scanner (companion CLI) | Dependency vulnerability scan | Builds from source | No riscv64 CI | No linux/riscv64 binary release | Pure Go; GOARCH=riscv64 go build works |
Critical Dependency Deep-Dive
grpcio (Python C extension): This is the single most significant riscv64 blocker for the Python service stack. grpcio embeds a C++ implementation with platform-specific assembly and SIMD paths. No prebuilt riscv64 wheel exists on PyPI for any grpcio version including 1.83.0 (latest). Issue #41591 was opened requesting riscv64 wheel support and was closed in July 2026 by the gRPC team citing the Google OSS Support Policy not yet covering riscv64, without a commitment to add the wheel. Users on riscv64 must build from source, which requires compatible versions of protobuf, abseil-cpp, and boringssl native toolchains. Distro packages (Debian, Fedora) provide riscv64 grpcio packages built from source for users who prefer that path.
Historical build issues: closed #37791 (SIGILL on riscv64, fixed 2024-10), closed #35839 (undefined symbol, fixed 2024-02), closed #36112 (build error, fixed 2024-04). No open correctness blockers remain; the build from source succeeds.
protobuf Python: No riscv64 binary wheel exists for the C extension (upb). PR #12244 attempted to add riscv64 support for the C extension wheel but was closed without merge in 2024-03. The py3-none-any.whl pure-Python fallback is available and functional; it installs on riscv64 without issues but performs slower than the C extension for high-throughput protobuf parsing.
Go dependencies: All Go dependencies in go/go.mod and vulnfeeds/go.mod are pure Go with no CGO. All compile cleanly on riscv64 using standard GOARCH=riscv64 cross-compilation. No riscv64-specific issues were found in any of these dependencies.
11. Known Bugs and Active Issues
| ID | Title | Status | Severity | Notes |
|---|---|---|---|---|
| grpc #41591 | grpcio riscv64 wheel support | Closed without commitment (2026-07-15) | High (for Python service deployment) | Google OSS Support Policy cited; build from source works |
| protobuf #12244 | riscv64 C extension wheel | Closed without merge (2024-03) | Medium (pure-Python fallback available) | Performance regression vs C extension only |
No correctness bugs, no data-corruption bugs, no RISC-V-specific failures were found in any of the three osv.dev repositories or in their Go dependencies.
12. Objections and Upstream Blockers
No objections have been stated in any upstream issue tracker or mailing list, because riscv64 support for osv.dev has never been requested or discussed.
Organizational blocker – grpcio wheel: The gRPC team explicitly closed the riscv64 wheel request (#41591) citing that riscv64 is not covered by Google’s OSS Support Policy. This is the one explicit upstream rejection relevant to this project. The probability of Google adding riscv64 grpcio wheels to PyPI in the short term is low based on this closure.
Non-blocker – osv-scanner release binary: Adding linux/riscv64 to osv-scanner’s goreleaser configuration is a two-line change. There is no stated objection, only absence of demand. Acceptance probability if a PR is submitted: high, given that it is a pure-Go binary with no riscv64-specific code required.
Deployment infrastructure: osv.dev is deployed exclusively to Google Cloud Platform, which does not offer riscv64 VMs or GKE node pools. Running the full osv.dev service stack on riscv64 hardware is not possible on GCP regardless of software readiness. This is a hard external constraint, not an upstream objection.
13. Investment Analysis
Google is a RISE Premier Member. The Go components of osv.dev are already riscv64-capable with no investment required. RISE has not funded any osv.dev work. The remaining gaps are narrow and concentrated in the Python stack (grpcio wheel) and osv-scanner release packaging.
13.1 Functional Enablement
The Go components of osv.dev (API server, ingestion workers, osv-scanner, osv-scalibr) are functionally complete on riscv64 today – they compile and run with GOARCH=riscv64 go build. No functional enablement work is needed for the Go stack.
The Python services are functionally complete except for the grpcio build dependency. Building grpcio from source on riscv64 works (all historical build failures are fixed), but it requires users to have a native toolchain. For deployment in a distro environment, distro packages suffice. For a GCP/Docker deployment, the Dockerfile would need a source-build step for grpcio.
13.2 Performance Optimization
Not applicable. osv.dev has no architecture-specific optimizations on any platform. The project does not perform computation where SIMD or ISA-specific tuning would matter. The only performance consideration is the protobuf Python C extension gap – the pure-Python fallback is functional but slower for high-throughput parsing. This is a dependency issue (protobuf), not an osv.dev issue.
13.3 CI/CD Infrastructure
A riscv64 CI job for osv-scanner and osv-scalibr would validate that the Go build continues to compile and that tests pass. This is low complexity: add GOARCH: riscv64 to the Go test matrix in the existing GitHub Actions workflow. No hardware runner is required; cross-compilation and go test -run . via QEMU are standard for Go riscv64 CI.
13.4 Ecosystem Enablement
The osv-scanner linux/riscv64 binary release gap affects any riscv64 distribution that wants to ship a vulnerability scanner built on the OSV database. Adding riscv64 to the goreleaser build matrix is a two-line change. The project already cross-compiles arm64 this way.
13.5 Summary Table
| Area | Work Item | Effort (person-weeks) | Owner | Priority |
|---|---|---|---|---|
| Functional | Add riscv64 to osv-scanner goreleaser build matrix | 0.2 | Google / community PR | High |
| Functional | Add riscv64 Docker build target to Go service Dockerfiles (add --platform linux/riscv64 or GOARCH=riscv64) |
0.5 | Medium | |
| Functional | Document grpcio source-build procedure for riscv64 in Python worker Dockerfile | 0.5 | Google / community | Medium |
| CI/CD | Add GOARCH=riscv64 cross-compile step to osv-scanner and osv-scalibr Go test workflows | 0.5 | Community PR | Medium |
| Functional | Upstream grpcio riscv64 wheel to PyPI (blocked by Google OSS Support Policy) | 4-8 (grpcio team effort) | gRPC team | Low (blocked externally) |
14. Updates
No updates yet – initial report dated 2026-06-17.
15. References
- google/osv.dev repository
- google/osv-scanner repository
- google/osv-scalibr repository
- osv.dev homepage
- OSV Schema specification (OpenSSF)
- osv-scanner v2.5.1 release
- osv-scalibr v0.5.2 release
- PyPI osv package
- grpcio issue #41591 – riscv64 wheel support closed without commitment
- grpcio issue #37791 – SIGILL on riscv64 (fixed 2024-10)
- grpcio issue #35839 – undefined symbol on riscv64 (fixed 2024-02)
- grpcio issue #36112 – build error on riscv64 (fixed 2024-04)
- protobuf PR #12244 – riscv64 C extension wheel (closed without merge 2024-03)
- klauspost/cpuid issue #158 – riscv64 support (closed 2026-06-16)
- RISE Project member list
- Arch Linux RISC-V package index
- Google Open Source Community Guidelines