podtrace

Projekte, die den nachfolgenden Best Practices folgen, können sich freiwillig selbst zertifizieren und zeigen, dass sie einen Core-Infrastruktur-Initiative-/OpenSSF-Badge erhalten haben.

Es gibt keine Auswahl an Praktiken, die garantieren können, dass Software niemals Fehler oder Schwachstellen hat. Selbst formale Methoden können fehlschlagen, wenn die Spezifikationen oder Annahmen falsch sind. Auch gibt es keine Auswahl an Praktiken, die garantieren können, dass ein Projekt eine gesunde und gut funktionierende Entwicklungsgemeinschaft erhalten wird. Allerdings können Best Practices dabei helfen, die Ergebnisse von Projekten zu verbessern. Zum Beispiel ermöglichen einige Praktiken die Mehrpersonen-Überprüfung vor der Freigabe, die sowohl helfen können ansonsten schwer zu findende technische Schwachstellen zu finden und gleichzeitig dazu beitragen Vertrauen und den Wunsch nach wiederholter Zusammenarbeit zwischen Entwicklern verschiedener Unternehmen zu schaffen. Um ein Badge zu verdienen, müssen alle MÜSSEN und MÜSSEN NICHT Kriterien erfüllt sein, alle SOLLTEN Kriterien müssen erfüllt sein oder eine Rechtfertigung enthalten, und alle EMPFHOLEN Kriterien müssen erfüllt sein oder nicht (wir wollen sie zumindest berücksichtigt wissen). Wenn lediglich ein allgemeiner Kommentar angebeben werden soll, keine direkte Begründung, dann ist das erlaubt, wenn der Text mit "//" und einem Leerzeichen beginnt. Feedback ist willkommen auf derGitHub-Website als Issue oder Pull-Request. Es gibt auch eine E-Mail-Liste für allgemeine Diskussionen.

Wir stellen Ihnen gerne die Informationen in mehreren Sprachen zur Verfügung, allerdings ist die englische Version maßgeblich, insbesondere wenn es Konflikte oder Inkonsistenzen zwischen den Übersetzungen gibt.
Wenn dies Ihr Projekt ist, zeigen Sie bitte Ihren Badge-Status auf Ihrer Projektseite! Der Badge-Status sieht so aus: Badge-Level für Projekt 12882 ist passing So können Sie ihn einbetten:
Sie können Ihren Badge-Status anzeigen, indem Sie Folgendes in Ihre Markdown-Datei einbetten:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12882/badge)](https://www.bestpractices.dev/projects/12882)
oder indem Sie Folgendes in Ihr HTML einbetten:
<a href="https://www.bestpractices.dev/projects/12882"><img src="https://www.bestpractices.dev/projects/12882/badge"></a>


Dies sind die Kriterien das Level Silber. Sie können auch die Kriterien für die Level Passing oder Gold sehen.

Baseline Series: Baseline Niveau 1 Baseline Niveau 2 Baseline Niveau 3

        

 Grundlagen 15/17

  • Allgemein

    Hinweis: Andere Projekte können den selben Namen benutzen.

    eBPF-driven diagnostic tool for Kubernetes applications 🐝

    Bitte verwenden Sie das SPDX-License-Expression-Format; Beispiele sind "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" und "(BSD-2-Clause OR Ruby)". Geben sie nicht die einfachen oder doppelten Anführungszeichen mit an.
    Wenn es mehr als eine Programmiersprache gibt, listen Sie sie als kommagetrennte Werte (Leerzeichen sind optional) auf und sortieren Sie sie von am häufigsten zum am wenigsten verwendeten. Wenn es eine lange Liste gibt, bitte mindestens die ersten drei häufigsten auflisten. Wenn es keine Programmiersprache gibt (z. B. ist dies nur ein Dokumentations- oder Testprojekt), verwenden Sie das einzelne Zeichen "-". Bitte verwenden Sie eine herkömmliche Großschreibung für jede Sprache, z.B. "JavaScript".
    Das Common Platform Enumeration (CPE) ist ein strukturiertes Namensschema für IT-Systeme, Software und Pakete. Es wird in diversen Systemen und Datenbanken bei der Meldung von Schwachstellen verwendet.
  • Voraussetzungen


    Das Projekt MUSS ein bestimmtes Level erreichen. [achieve_passing]

  • Grundlegende Informationen auf der Projektwebseite


    Die Informationen darüber, wie man mitwirken kann, MÜSSEN die Anforderungen für akzeptable Beiträge (z.B. einen Hinweis auf einen erforderlichen Codierungsstandard) enthalten. (URL erforderlich) [contribution_requirements]
  • Projektüberwachung


    Das Projekt SOLLTE einen rechtlichen Mechanismus haben, wo alle Entwickler von nicht-trivialen Beiträgen versichern, dass sie rechtlich ermächtigt sind, diese Beiträge zu machen. Der häufigste und leicht umsetzbare Ansatz, ist die Verwendung eines Developer Certificate of Origin (DCO) , wo Benutzer "signed-off-by" in ihren Commits und die Projektlinks zur DCO-Website hinzufügen. Allerdings DARF dies als Contributor License Agreement (CLA) oder als ein anderer rechtlicher Mechanismus implementiert werden. (URL erforderlich) [dco]
    Die DCO ist der empfohlene Mechanismus, weil er einfach zu implementieren ist, im Quellcode verfolgt wird und git direkt eine "signed-off" Funktion mit "commit -s" unterstützt. Um am effektivsten zu sein, ist es am besten, wenn die Projektdokumentation erklärt, was "signed-off" für dieses Projekt bedeutet. Eine CLA ist eine rechtliche Vereinbarung, die die Bedingungen definiert, unter denen intellektuelle Werke an eine Organisation oder ein Projekt lizenziert wurden. Ein Contributor Assignment Agreement (CAA) ist eine gesetzliche Vereinbarung, die die Rechte an einer intellektuellen Arbeit an eine andere Person überträgt; Projekte müssen keine CAAs haben, da CAA das Risiko erhöht, dass potenzielle Mitwirkende nicht dazu beitragen werden, vor allem, wenn der Empfänger eine gewinnorientierte Organisation ist. Die Apache Software Foundation CLAs (die individuelle Contributor-Lizenz und die Corporate CLA) sind Beispiele für CLAs, für Projekte, die bestimmt haben, dass die Risiken dieser CLAs für das Projekt geringen sind als ihre Vorteile.

    Podtrace uses the Developer Certificate of Origin (DCO), not a CLA or CAA.

    Policy and explanation: https://github.com/gma1k/podtrace/blob/main/CONTRIBUTING.md#developer-certificate-of-origin
    The section links to https://developercertificate.org/ and states what signing off means for this project: the contributor asserts they wrote the code or have the right to submit it under Apache-2.0, that they have employer permission where the employer owns the copyright, and that the name and email in the trailer are public and permanent. Contributors add the trailer with git commit -s.

    Enforcement: https://github.com/gma1k/podtrace/blob/main/.github/workflows/dco.yml
    The workflow runs on every pull request and verifies that each commit in the PR carries a Signed-off-by: trailer whose email matches the commit author's email. Missing sign-offs fail the check and block the merge. Machine-generated commits from bot accounts (renovate, dependabot, github-actions) are exempt, since a bot cannot make the DCO assertion.

    Contributors are also reminded in the pull request template: https://github.com/gma1k/podtrace/blob/main/.github/PULL_REQUEST_TEMPLATE.md



    Das Projekt MUSS eindeutig sein Projekt-Governance-Modell (die Art, wie es Entscheidungen fällt, einschließlich der wichtigsten Rollen) definieren und dokumentieren. (URL erforderlich) [governance]
    Es muss einen gut dokumentierten, etablierten Weg geben, Entscheidungen zu treffen und Streitigkeiten zu lösen. In kleinen Projekten kann dies so einfach sein wie, "der Projektinhaber und -Leiter trifft alle endgültigen Entscheidungen". Es gibt verschiedene Führungs-Modelle, darunter wohlwollender Diktator und formale Meritokratie; Für weitere Details siehe Governance-Modelle . Sowohl zentralisierte (z.B. Single-Maintainer) als auch dezentrale (z.B. Gruppen-Maintainer) Ansätze wurden erfolgreich in Projekten verwendet. Die Governance-Informationen müssen nicht die Möglichkeit einer Projektspaltung dokumentieren, da dies für FLOSS-Projekte immer möglich ist.

    Podtrace documents a maintainer-led governance model in GOVERNANCE.md:
    https://github.com/gma1k/podtrace/blob/main/GOVERNANCE.md

    Roles: the document defines Contributors (anyone opening an issue, answering in Discussions, improving docs, or sending a PR; no formal status required or conferred) and Maintainers (hold merge rights). Maintainers are named in https://github.com/gma1k/podtrace/blob/main/MAINTAINERS.md and their per-path review authority is encoded in https://github.com/gma1k/podtrace/blob/main/CODEOWNERS, which GitHub enforces as required approvals.

    Decision-making: decisions are made in the open on the pull request or issue that proposes them, with the bar scaled to how hard the change is to reverse. Bug fixes, docs, tests, and dependency bumps need a PR with CODEOWNERS approval. New features, probes, and adapters need a feature request or epic issue first so the shape is agreed before code is written. Changes to the public surface (CRDs, CLI flags, Helm values, env vars) additionally require an explicit read of STABILITY.md, with breaking changes marked in the commit subject and accompanied by a migration note. Security fixes are handled privately under SECURITY.md until an advisory ships.

    Dispute resolution: disagreements are resolved by discussion on the thread. Where consensus is not reached, maintainers decide, and are required to state their reasoning in the thread rather than merging silently.

    Role changes: maintainership follows demonstrated work (a track record of merged non-trivial contributions, reviews that catch real problems, and sustained engagement) and is extended by invitation from existing maintainers. Maintainers who step back are recorded as emeritus rather than removed. Governance changes themselves go through the same PR process as code, proposed as their own PR.

    Related: code of conduct and its enforcement path at https://github.com/gma1k/podtrace/blob/main/CODE_OF_CONDUCT.md, and support and communication channels at https://github.com/gma1k/podtrace/blob/main/SUPPORT.md



    Das Projekt MUSS einen Code of Conduct etablieren und an einem üblichen Ort veröffentlichen. (URL erforderlich) [code_of_conduct]
    Projekte können das Miteinander ihrer Gemeinschaft verbessern und Erwartungen in Bezug auf akzeptables Verhalten setzen, indem sie einen Verhaltenskodex verfassen. Dies kann helfen, Probleme zu vermeiden, bevor sie auftreten, und das Projekt zu einem einladenderen Ort zu machen. Dies sollte sich nur auf das Verhalten innerhalb der Gemeinschaft/ am Arbeitsplatz des Projekts konzentrieren. Beispielhafte Verhaltenskodizes sind der Linux Kernel Code of Conduct, der Contributor Covenant Code of Conduct, der Debian Code of Conduct, der Ubuntu Code of Conduct, der Fedora Code of Conduct, der GNOME Code Of Conduct, der KDE Community Code of Conduct, der Python Community Code of Conduct, die Ruby Community Conduct Guideline und der Rust Code of Conduct.

    Podtrace has adopted the Contributor Covenant, version 2.1, as its code of conduct, posted at the standard repository-root location:
    https://github.com/gma1k/podtrace/blob/main/CODE_OF_CONDUCT.md

    Because the file is CODE_OF_CONDUCT.md at the root, GitHub detects it automatically and surfaces it in the repository's Community Standards profile and in the contributor-facing prompts on issues and pull requests. The canonical upstream text is linked at https://www.contributor-covenant.org/version/2/1/code_of_conduct/

    Scope: the code of conduct applies to all project-managed spaces (issue tracker, pull requests, discussions, and official off-platform communication) and to individuals officially representing the project in public. It addresses behavior within the project community only.

    Reporting: concerns are reported privately to the maintainer. All reports are reviewed and investigated promptly and fairly, and the maintainer is obligated to respect the privacy and security of the reporter.

    Enforcement: the project applies the Contributor Covenant Enforcement Guidelines (https://www.contributor-covenant.org/version/2/1/code_of_conduct/#enforcement-guidelines), with four escalating levels: correction, warning, temporary ban, and permanent ban. Enforcement authority rests with the maintainer listed in https://github.com/gma1k/podtrace/blob/main/MAINTAINERS.md, consistent with the maintainer-led model documented in https://github.com/gma1k/podtrace/blob/main/GOVERNANCE.md



    Das Projekt MUSS klar und deutlich die Rollen- auf Aufgabenverteilung dokumentieren, inklusive einzelnen Tätigkeiten, die von den Rollenträgern ausgeführt werden müssen. Es MUSS eindeutig sein wer welche Rolle hat, auch wenn es in anderer Form dokumentiert ist. (URL erforderlich) [roles_responsibilities]
    Die Dokumentation für Governance und Rollen und Verantwortlichkeiten können an einem Ort sein.

    Podtrace documents its roles and their responsibilities across two linked files, plus a machine-enforced ownership map.

    Roles are defined in https://github.com/gma1k/podtrace/blob/main/GOVERNANCE.md#roles
    Contributors are anyone who opens an issue, answers a question in Discussions, improves docs, or sends a pull request; no formal status is required and none is conferred. Maintainers hold merge rights.

    Maintainer responsibilities and required tasks are listed in https://github.com/gma1k/podtrace/blob/main/MAINTAINERS.md#what-maintainers-do
    Maintainers: (1) review and merge pull requests and are the required approvers under CODEOWNERS; (2) triage incoming issues, apply area and type labels, and close duplicates; (3) cut releases following the release flow in CONTRIBUTING.md; (4) handle private vulnerability reports under SECURITY.md; (5) decide what lands in the public surface governed by STABILITY.md.

    Several of these tasks carry documented, measurable commitments. SECURITY.md (https://github.com/gma1k/podtrace/blob/main/SECURITY.md) binds vulnerability handling to acknowledgement within 3 business days, triage and confirmation within 7 business days, and a default 90-day coordinated disclosure window. CODE_OF_CONDUCT.md (https://github.com/gma1k/podtrace/blob/main/CODE_OF_CONDUCT.md) assigns code-of-conduct enforcement to the maintainer under the Contributor Covenant Enforcement Guidelines.

    Contributor-side responsibilities are documented in https://github.com/gma1k/podtrace/blob/main/CONTRIBUTING.md, covering DCO sign-off, Conventional Commit format, the required test plan, and regeneration of manifests and clientsets when API types change.

    Who holds which role: MAINTAINERS.md names the current maintainer (Ghassan Malke, GitHub @gma1k) with contact details and areas of ownership. Per-path review authority is encoded in https://github.com/gma1k/podtrace/blob/main/CODEOWNERS, which GitHub enforces as required approval, making the role assignment machine-checkable rather than only asserted in prose. MAINTAINERS.md requires that the maintainer list, CODEOWNERS, and the repository's collaborator settings be updated together, so the documented roster cannot silently diverge from the enforced one.

    Role changes: https://github.com/gma1k/podtrace/blob/main/GOVERNANCE.md#becoming-a-maintainer describes how maintainership is earned (a track record of merged non-trivial contributions, reviews that catch real problems, demonstrated compatibility judgment, and sustained engagement), with invitations extended by existing maintainers. Maintainers who step back are recorded as emeritus rather than removed.



    Das Projekt MUSS in der Lage sein, mit minimaler Unterbrechung fortzufahren, wenn eine beliebige Person nicht in der Lage ist oder stirbt. Insbesondere MUSS das Projekt in der Lage sein, Probleme zu lösen, vorgeschlagene Änderungen zu akzeptieren und Versionen der Software freizugeben, innerhalb einer Woche nach der Bestätigung, dass eine Person nicht mehr in der Lage ist oder gestorben ist. Dies DARF sichergestellt werden, indem man jemandem anderes notwendige Schlüssel, Passwörter und gesetzliche Rechte gibt, um das Projekt fortzusetzen. Einzelpersonen, die ein FLOSS-Projekt ausführen, DÜRFEN dies durch die Bereitstellung von Schlüsseln in einer Lockbox und einer Willenserklärung zur Bereitstellung von erforderlichen gesetzlichen Rechten (z. B. für DNS-Namen). (URL erforderlich) [access_continuity]

    Podtrace currently has one maintainer, which the project states openly in its roadmap rather than leaving implicit. Continuity is addressed through a documented succession arrangement:
    https://github.com/gma1k/podtrace/blob/main/GOVERNANCE.md#continuity

    Credentials: the maintainer's GitHub account credentials, including two-factor recovery codes, are held by a designated successor through emergency access on the project's credential manager. GitHub account access transitively covers everything required to continue the project: the repository, its issue tracker, branch protection settings, the ghcr.io/gma1k container and chart registry namespaces, and repository secrets. The successor can therefore create and close issues, approve and merge pull requests, and publish a release well within one week of confirmed loss of support.

    Signing keys: podtrace holds no private signing keys, so there is no key material that can be lost with an individual. All artifacts are signed with cosign keyless via GitHub OIDC, with signing events recorded in the public Sigstore Rekor transparency log (see https://github.com/gma1k/podtrace/blob/main/.github/workflows/release.yml). Any successor with repository write access produces signatures that verify identically to those issued today.

    Release process: releases are fully automated via release-please and GitHub Actions using the workflow's built-in GITHUB_TOKEN, and are documented at https://github.com/gma1k/podtrace/blob/main/CONTRIBUTING.md. No personal credentials or undocumented local tooling are required to cut a release. The one external token, used for OperatorHub publication, is [held by the successor / reissuable by the successor following the steps documented in the continuity section].

    Legal rights and domain names: podtrace uses no custom domain. The podtrace.io string appears solely as a Kubernetes annotation namespace and requires no DNS registration, so no domain transfer or testamentary instrument is required. The project is licensed Apache-2.0 (with GPL-2.0 for the eBPF programs under bpf/) and holds no trademark or infrastructure assets requiring transfer.

    Fork rights: as a FLOSS project under Apache-2.0, the full history and build tooling are public, so continuation by fork is available to the community independent of any individual.



    Das Projekt SOLLTE einen Bus-Faktor von 2 oder mehr haben. (URL erforderlich) [bus_factor]
    Ein "bus factor" (aka "LKW-Faktor") ist die minimale Anzahl von Projektmitgliedern, die plötzlich aus einem Projekt ("hit by a bus") verschwinden müssen, bevor das Projekt aufgrund fehlender kompetenter Mitarbeiter stockt. Das Truck-Factor-Tool kann dies für Projekte auf GitHub schätzen. Weitere Informationen finden Sie unter Bewertung des Busfaktors von Git-Repositories von Cosentino et al.

    Podtrace does not currently meet this criterion. The project has a bus factor of 1.

    Measurement: of 311 human-authored commits (excluding renovate and dependabot), 307 are from the sole maintainer. The remaining four are one-off contributions from four separate individuals, none of whom has sustained involvement. Under the truck-factor methodology of Cosentino et al., removing the single maintainer orphans effectively the entire codebase.

    The project states this openly rather than leaving it implicit. https://github.com/gma1k/podtrace/blob/main/ROADMAP.md names project sustainability as roadmap item 10: "Podtrace has one maintainer. That is the single largest risk to anyone adopting it, more than any individual feature, and it is worth naming plainly rather than leaving implicit. A second maintainer with real review authority is the goal."

    Mitigations in place, aimed at the criterion's concern that a project stalls for lack of knowledgeable personnel:

    Knowledge is externalized rather than tacit. The repository carries 37 reference documents at https://github.com/gma1k/podtrace/tree/main/docs, covering system architecture, eBPF internals, the event schema, the development workflow, kernel and Kubernetes compatibility constraints, and end-to-end verification procedure. The kernel-version and BTF pitfalls that would otherwise exist only as maintainer expertise are documented.

    Intended behavior is captured executably. The tree contains 525 Go test files against 313 non-test source files, plus 22 chainsaw end-to-end scenarios that exercise the operator and agent against a real cluster. A successor can verify correctness without reconstructing intent.

    The release process requires no individual. Releases are automated end to end via release-please and GitHub Actions, with keyless cosign signing through GitHub OIDC, so no private key or undocumented local tooling is involved. The process is documented at https://github.com/gma1k/podtrace/blob/main/CONTRIBUTING.md

    A documented path to a second maintainer exists at https://github.com/gma1k/podtrace/blob/main/GOVERNANCE.md#becoming-a-maintainer, with criteria based on demonstrated contribution and review quality, and per-path review authority tracked in https://github.com/gma1k/podtrace/blob/main/CODEOWNERS

    As an Apache-2.0 project with full public history and reproducible build tooling, continuation by fork is available to the community independent of any individual.

    Raising the bus factor to 2 is an active goal, tracked as roadmap.


  • Dokumentation


    Das Projekt MUSS eine dokumentierte Roadmap, für mindestens das nächste Jahr haben, die beschreibt, was das Projekt beabsichtigt zu tun und nicht zu tun. (URL erforderlich) [documentation_roadmap]
    Das Projekt könnte die Roadmap nicht umsetzen, das ist ok; Der Zweck der Roadmap ist es, potenziellen Nutzern/innen und Entwicklern/innen zu helfen, die beabsichtigte Richtung des Projekts zu verstehen. Sie muss nicht detailliert sein.

    Podtrace maintains a roadmap covering both intended work and explicit non-goals:
    https://github.com/gma1k/podtrace/blob/main/ROADMAP.md

    What the project intends to do: the roadmap lists ten items grouped into Now, Next, and Later horizons. Near-term work covers reconciling the documented CRD inventory, publishing a per-CRD v1beta1 readiness assessment, and completing the supply-chain baseline with SLSA provenance and an OpenSSF Security Insights manifest. Medium-term work covers defining a formal API deprecation policy, graduating individual CRDs from v1alpha1 to v1beta1, resolving whether to ship conversion webhooks, and making the importable Go API usable externally through runnable godoc examples. Longer-term work covers reaching v1.0.0 against the gates defined in https://github.com/gma1k/podtrace/blob/main/STABILITY.md, stating platform support in CI-verified versus best-effort tiers, and recruiting a second maintainer.

    What the project intends not to do: the roadmap includes an explicit Non-goals section. Podtrace will not become a non-Linux agent, because its tracing core is eBPF and therefore Linux-kernel bound by construction. It will not become a policy engine, admission controller, or service mesh, because it observes workloads rather than admitting, mutating, or routing them. It will not implement agent self-update, so that agent version remains whatever the operator deploys and upgrades stay under the cluster owner's control. Non-goals are open to challenge through project Discussions.

    Time horizon: the roadmap deliberately records themes and rough ordering rather than dates or quarters, on the stated reasoning that a roadmap with slipped quarters is worse than no roadmap. The scope covers well beyond one year: v1.0.0 is described as downstream of every other item and "not near," and the intervening work (per-CRD API graduation, a deprecation policy, a conversion story, supply-chain attestation, and tiered platform support) represents multi-year effort at the project's current capacity. Version-gating rules are kept separately in STABILITY.md so the roadmap states direction while STABILITY.md states commitments.

    The roadmap is kept current: its status table reflects the shipped v0.14.x line and the 22 end-to-end chainsaw suites present in the repository. It is linked from the project README and cross-referenced from GOVERNANCE.md and CONTRIBUTING.md.



    Das Projekt MUSS in der Dokumentation die Architektur (alias High-Level-Design) der vom Projekt entwickelten Software bereitstellen. Wenn das Projekt keine Software produziert, wählen Sie "nicht anwendbar" (N/A). (URL erforderlich) [documentation_architecture]
    Eine Softwarearchitektur erläutert die grundlegenden Strukturen eines Programms, d.h. die Hauptkomponenten des Programms, die Beziehungen zwischen ihnen und die Schlüsseleigenschaften dieser Komponenten und Beziehungen.

    Podtrace documents its high-level design across a set of indexed architecture documents, entry point at https://github.com/gma1k/podtrace/blob/main/docs/README.md

    Primary architecture document: https://github.com/gma1k/podtrace/blob/main/docs/architecture.md
    Describes the system's major components and how they relate: eBPF programs running in the kernel (kprobes, uprobes, and tracepoints), a shared ring-buffer map carrying events across the kernel/userspace boundary, and a Go userspace layer comprising the tracer lifecycle manager, the object loader, the probe attachment layer, the event parser, and the cgroup filter that scopes events to a target pod. It documents the end-to-end data flow from kernel event through ring buffer, cgroup filtering, and enrichment, to the output surfaces (live CLI diagnostics, Prometheus metrics, and trace exporters).

    Podtrace runs in three modes, each documented:

    CLI: https://github.com/gma1k/podtrace/blob/main/docs/cli-architecture.md explains the node-spawn model. The CLI does not load eBPF on the invoking workstation; it identifies the node hosting each target pod and runs a short-lived privileged pod on that node, so the kernel loading eBPF is the same kernel running the target workload. The document states the structural reason: eBPF executes in the kernel where it is loaded, so a workstation kernel has no visibility into a remote node's processes or cgroups.

    Operator and agent: https://github.com/gma1k/podtrace/blob/main/docs/operator.md documents the control plane. An operator Deployment runs three reconcilers, each owning one CRD. TracerConfigReconciler manages cluster-wide infrastructure including the agent ServiceAccount, RBAC, and the agent DaemonSet. PodTraceReconciler handles continuous tracing and aggregates per-node status. PodTraceSessionReconciler handles bounded diagnose sessions by spawning per-node Jobs. The agent DaemonSet runs one pod per node and performs the actual kernel-level tracing.

    Per-session Jobs: documented in https://github.com/gma1k/podtrace/blob/main/docs/crd-podtracesession.md, including the per-session Role and RoleBinding the operator generates to scope report writes.

    Kernel-side design detail is in https://github.com/gma1k/podtrace/blob/main/docs/ebpf-internals.md and the binary wire format crossing the kernel/userspace boundary is specified in https://github.com/gma1k/podtrace/blob/main/docs/event-schema.md

    Key architectural properties are documented alongside the structure: the privilege model for each component (unprivileged operator, agent with CAP_BPF and CAP_PERFMON, session Jobs inheriting the agent's capability set) in https://github.com/gma1k/podtrace/blob/main/SECURITY.md; cgroup-based event isolation to the target pod; and cross-namespace consent gating enforced at both reconcile and admission, in https://github.com/gma1k/podtrace/blob/main/docs/cross-namespace-cr-targeting.md

    Supported kernel, Kubernetes, and architecture matrices are in https://github.com/gma1k/podtrace/blob/main/docs/compatibility.md



    Das Projekt MUSS dokumentieren, was der/die Benutzer/in in Bezug auf die Sicherheit der Projektsoftware (seine "Sicherheitsanforderungen") erwarten kann und nicht erwarten kann. (URL erforderlich) [documentation_security]
    Dies sind Sicherheitsanforderungen, die die Software erfüllen soll.

    Podtrace documents its security requirements, including both the guarantees it provides and the limits it explicitly does not cover, primarily in:
    https://github.com/gma1k/podtrace/blob/main/SECURITY.md

    What users can expect. The security model section states the privilege posture and blast radius of each component. The operator runs unprivileged (distroless nonroot, no host mounts); a compromised operator can only manipulate CRDs in its own namespace and cannot escalate to host privileges directly. The agent DaemonSet runs with CAP_BPF, CAP_PERFMON, and hostPID on each node, and the documentation states plainly that a compromised agent is roughly equivalent to a compromised privileged workload on that node. Per-session Jobs inherit the agent's capability set and are confined to the same single-node blast radius.

    Tenant isolation is the central guarantee, because podtrace observes decrypted application-layer traffic. Cross-namespace tracing is consent-gated: a namespaced custom resource may target pods in a foreign namespace only when that namespace opts in via the podtrace.io/allow-tracing-from annotation. This is enforced by the operator at every reconcile, which is authoritative, and by a validating webhook at admission for fast feedback. Without the grant, a custom resource is confined to its own namespace and cannot capture another tenant's decrypted L7 traffic, DNS queries, syscalls, or file paths. Full semantics are documented at https://github.com/gma1k/podtrace/blob/main/docs/cross-namespace-cr-targeting.md

    Supply-chain guarantees: all published artifacts (container image, Helm chart, release tarballs) are signed with cosign keyless via GitHub OIDC, with signing events recorded in the public Sigstore Rekor transparency log. Verification commands are documented at https://github.com/gma1k/podtrace/blob/main/docs/installation.md

    What users cannot expect. SECURITY.md contains an explicit out-of-scope section. Issues in upstream Kubernetes, the host kernel's BPF verifier, and third-party exporters are not in scope. Attacks that presuppose an adversary already holding cluster-admin privileges are stated to be outside the threat model. Denial of service through excessive trace events on the agent's ring buffer is a user-side concern, with the bounding controls named (samplePercent and thresholds). Development-only paths are excluded.

    Feature-level limits are documented the same way. https://github.com/gma1k/podtrace/blob/main/docs/crypto-detection.md states that AF_ALG crypto-socket detection is observation rather than enforcement: it surfaces use of the vulnerable interface, but does not block the syscall, does not detect exploitation, and is not a substitute for patching. It is also off by default.

    Security-relevant defaults are documented at https://github.com/gma1k/podtrace/blob/main/docs/configuration.md, including that PII redaction (PODTRACE_REDACT_PII) and DNS-name stripping (PODTRACE_REDACT_DNS_NAMES) are disabled by default, and that plaintext export to non-loopback hosts is disabled by default and must be explicitly enabled.

    Hardening guidance for deployments where attacker capability is a concern, covering image digest pinning, RBAC restriction of custom-resource creation, narrow granting of the cross-namespace annotation, and per-node session capacity caps, is in the hardening section of SECURITY.md, with per-distribution notes (SELinux, AppArmor, Pod Security Standards) in the platform guides under https://github.com/gma1k/podtrace/tree/main/docs

    Supported versions and the backport window are stated at the top of SECURITY.md.



    Das Projekt MUSS eine "Quickstart"-Anleitung für neue Benutzer/innen haben, um ihnen zu helfen, schnell mit der Software umgehen zu können. (URL erforderlich) [documentation_quick_start]
    Die Idee ist, den Benutzern/innen zu zeigen, wie man anfängt und was die Software überhaupt macht. Dies ist entscheidend für potenzielle Benutzer/innen, um loszulegen.

    kubectl apply -f https://github.com/gma1k/podtrace/releases/latest/download/quickstart.yaml
    kubectl apply -f https://github.com/gma1k/podtrace/releases/latest/download/quickstart-demo.yaml

    podtrace -n production my-pod # realtime trace
    podtrace -n production my-pod --diagnose 30s --export json # bounded diagnose with a JSON report

    Prerequisites (kernel 5.8 or later, BTF availability, Kubernetes 1.28 or later) are stated in the installation guide and detailed at https://github.com/gma1k/podtrace/blob/main/docs/compatibility.md, with the full CLI reference at https://github.com/gma1k/podtrace/blob/main/docs/usage.md and a documentation index at https://github.com/gma1k/podtrace/blob/main/docs/README.md



    Das Projekt MUSS sich bemühen, die Dokumentation mit der aktuellen Version der Projektergebnisse (einschließlich der vom Projekt produzierten Software) stehts zu aktualisieren. Jegliche bekannte Dokumentationsfehler, die es inkonsistent machen, MÜSSEN behoben werden. Wenn die Dokumentation in der Regel aktuell ist, aber fälschlicherweise einige ältere Informationen enthält, die nicht mehr wahr sind, behandeln Sie diese als Störung, dann verfolgen und beheben Sie diese wie üblich. [documentation_current]
    Die Dokumentation DARF Informationen über Unterschiede oder Änderungen zwischen Versionen der Software und/oder Links zu älteren Versionen der Dokumentation enthalten. Die Absicht dieses Kriteriums ist nicht, dass die Dokumentation perfekt sein muss, vielmehr soll Arbeit investiert, um die Dokumentation konsistent zu halten

    Podtrace treats documentation currency as part of the change process rather than as periodic cleanup.

    Process: the pull request template at https://github.com/gma1k/podtrace/blob/main/.github/PULL_REQUEST_TEMPLATE.md requires contributors to confirm that user-facing changes are accompanied by updates under docs/, and that generated manifests and clientsets are regenerated and committed when API types change. CODEOWNERS routes documentation changes for review alongside code.

    Evidence of currency: the configuration reference at https://github.com/gma1k/podtrace/blob/main/docs/configuration.md documents every user-facing environment variable the codebase reads. A diff of documented variables against those referenced in source shows no undocumented user-facing options; the only variables absent from the documentation are internal test fixtures. The roadmap at https://github.com/gma1k/podtrace/blob/main/ROADMAP.md reflects the currently shipped release line and the actual count of end-to-end test suites in the repository. The changelog at https://github.com/gma1k/podtrace/blob/main/CHANGELOG.md is generated automatically from Conventional Commits by release-please on every release, so version history cannot drift from what shipped.

    Version differences: https://github.com/gma1k/podtrace/blob/main/STABILITY.md documents what each version line promises, the rules governing when custom resource definitions may change incompatibly, and the graduation gates from v1alpha1 to v1beta1 and from v0.x to v1.0.0. https://github.com/gma1k/podtrace/blob/main/docs/migration.md provides a translation table for users moving between the CLI and custom-resource workflows.

    Defect handling: documentation defects are tracked and fixed like code defects. Recent examples: [link the issues you open] corrected an undercount of the custom resource definition inventory in STABILITY.md, corrected the quickstart command sequence in the README to apply both released manifests in the required order, and updated docs/architecture.md to cover all three deployment modes (CLI node-spawn, operator with agent DaemonSet, and per-session Jobs) and to align its stated capability requirements with SECURITY.md. Known documentation inconsistencies identified during review of the OpenSSF Best Practices criteria have been resolved.

    The documentation set is indexed at https://github.com/gma1k/podtrace/blob/main/docs/README.md and spans 37 reference documents covering architecture, installation, per-CRD field references, eBPF internals, the event wire format, compatibility matrices, and per-platform guides.



    Die Projekt-Repository-Titelseite und / oder Website MUSS alle Errungenschaften, die erreicht wurden, einschließlich dieses Best Practices Abzeichens, innerhalb von 48 Stunden nach der öffentlichen Anerkennung ausweisen und verlinken. (URL erforderlich) [documentation_achievements]
    Eine Errungenschaft ist jegliche Form von externen Kriterien, auf die das Projekt speziell hingearbeitet hat, um diese zu erreichen, einschließlich einiger Abzeichen. Diese Informationen müssen nicht auf der ersten Seite der Website des Projekts einzusehen sein. Ein Projekt, das GitHub verwendet, kann Errungenschaften auf der Repository-Vorderseite setzen, indem man sie der README-Datei hinzufügt.

    The podtrace repository front page identifies and hyperlinks its achievements in a badge block at the top of the README, above the project description:
    https://github.com/gma1k/podtrace#readme

    The OpenSSF Best Practices badge is displayed and hyperlinked to the project's badge entry at https://www.bestpractices.dev/projects/12882

    The badge is embedded using the dynamic badge image endpoint (https://www.bestpractices.dev/projects/12882/badge) rather than a static image. BadgeApp serves that endpoint with the project's current attainment level, so any change in badge level is reflected on the repository front page immediately and automatically, with no commit required. The 48-hour requirement is therefore satisfied structurally: the displayed badge cannot become stale relative to the recognition it represents.

    Other achievements identified and hyperlinked in the same badge block:

    OpenSSF Scorecard, linked to the project's live Scorecard report at https://scorecard.dev/viewer/?uri=github.com/gma1k/podtrace, also served as a dynamic badge reflecting the current score.
    Artifact Hub, linked to the published Helm repository listing at https://artifacthub.io/packages/helm/podtrace/podtrace
    eBPF Landscape, linked to the ebpf.io applications listing at https://ebpf.io/applications/
    FOSSA license compliance and security status, linked to the project's FOSSA reports.
    RepoGrade, linked to https://www.repo-grade.com/report/gma1k/podtrace
    Go Reference (pkg.go.dev), release version, CI build status, test results, and test coverage.
    Two further external acceptances are identified and hyperlinked in the README body, each of which required passing a third-party review process for inclusion: the OperatorHub.io community operator catalog (https://operatorhub.io/operator/podtrace) and the Kubernetes krew plugin index (https://krew.sigs.k8s.io/), through which podtrace is installable as kubectl krew install podtrace.


  • Zugänglichkeit und Internationalisierung


    Das Projekt (beide Projektwebsite und Projektergebnisse) SOLLTE den bewährten Praktiken der Erreichbarkeit folgen, damit Personen mit Behinderungen noch an dem Projekt teilnehmen und die Projektergebnisse nutzen können, wo es vernünftig ist. [accessibility_best_practices]
    Für Webanwendungen siehe Web Content Accessibility Guidelines (WCAG 2.0) und dessen unterstützendes Dokument Understanding WCAG 2.0; Siehe auch W3C accessibility information. Für GUI-Anwendungen sollten Sie die umweltbezogenen Barrierefreiheitsrichtlinien verwenden (z.B. Gnome, KDE, XFCE, Android, iOS , Mac und Windows). Einige TUI-Anwendungen (z.B. `ncurses`-Programme) können bestimmte Dinge ausführen, um sich selbst zugänglicher zu machen (z.B. `alpine`'s `force-arrow-cursor`-Einstellung). Die meisten Kommandozeilen-Anwendungen sind ziemlich unzugänglich. Dieses Kriterium ist oft N/A, z.B. für Programmbibliotheken. Hier sind einige Beispiele, welche Maßnahmen zu ergreifen oder Fragen zu berücksichtigen sind:
    • Stellen Sie Text Alternativen für alle Nicht-Text-Inhalte zur Verfügung, so dass dieser in andere Formen umgewandelt werden kann, wie z.B. Großdruck, Blindenschrift, Sprache, Symbole oder einfachere Sprache ( WCAG 2.0-guideline 1.1)
    • Farbe ist nicht das einzige Mittel um Informationen zu übermitteln, die eine Aktion anzeigen, zu einer Eingabe auffordern oder visuelle Elemente unterscheiden. (WCAG 2.0 guideline 1.4.1)
    • Die visuelle Darstellung von Text und Textbildern hat einen Kontrast Verhältnis von mindestens 4,5:1, außer für großen Text, nebensächlichen Text, und Logos(WCAG 2.0 guideline 1.4.3)
    • Machen Sie alle Funktionalitäten von einer Tastatur aus erreichbar (WCAG guideline 2.1)
    • Ein GUI oder ein webbasiertes Projekt SOLLTE mit mindestens einen Screen-Reader auf der Zielplattform(en) testen (z.B. NVDA, Jaws oder WindowEyes auf Windows; VoiceOver auf Mac & iOS; Orca auf Linux/BSD; TalkBack auf Android). TUI-Programme DÜRFEN die Übermalung reduzieren, um eine redundante Lesung durch Screenreader zu verhindern.

    Podtrace produces a command-line tool and a Kubernetes operator. It has no graphical or web user interface of its own, so the criterion applies chiefly to terminal output and to project documentation.

    Color is never the sole means of conveying information (WCAG 2.0 guideline 1.4.1). Podtrace's CLI emits no color at all: the codebase includes no terminal-color dependency and no ANSI color escape sequences in any output path. All diagnostic information is conveyed through text and document structure, so output remains fully intelligible when piped, redirected to a file, or read by a screen reader. Text contrast (guideline 1.4.3) is governed entirely by the user's own terminal configuration.

    Text alternatives are provided for non-text content (guideline 1.1). Every image on the repository front page, including the project logo and all status badges, carries a descriptive alt attribute: https://github.com/gma1k/podtrace#readme. All documentation is authored in Markdown, which renders as semantic HTML and degrades cleanly to plain text.

    All functionality is available from a keyboard (guideline 2.1). The CLI requires no pointer input, and the operator interface is declarative YAML applied with kubectl, so every capability is keyboard-driven and scriptable.

    Terminal output integrity: podtrace displays data captured from traced application traffic, which is untrusted input. The project strips ANSI escape sequences from captured payloads before display, with test coverage for both color and cursor-movement injection. This prevents captured data from corrupting terminal state or disrupting assistive-technology output.

    Screen-reader considerations: the optional real-time display refreshes by redrawing the report every five seconds, which produces overdraw. The project documents alternative output modes that avoid this entirely and provide identical information: bounded diagnose mode (--diagnose), structured JSON export (--export json), and the PodTraceSession custom resource, which writes its report to a Kubernetes ConfigMap or to object storage. These are documented at https://github.com/gma1k/podtrace/blob/main/docs/usage.md and https://github.com/gma1k/podtrace/blob/main/docs/viewing-events.md, so no capability is available only through the refreshing display.

    The project ships an optional Grafana dashboard definition for its Prometheus metrics. Rendering and accessibility of that dashboard are governed by the user's own Grafana instance, which provides its own accessibility settings, rather than by podtrace.



    Die Projektsoftware SOLLTE internationalisiert werden, um eine einfachen Zugang für die Kultur, Region oder Sprache der Zielgruppe zu ermöglichen. Wenn die Internationalisierung (i18n) nicht andzuwenden ist (z. B. die Software keine für Endbenutzer beabsichtigte Texte erzeugt und keinen menschlich lesbaren Text sortiert), wählen Sie "nicht anwendbar" (N/A). [internationalization]
    Lokalisierung "bezieht sich auf die Anpassung eines Produkt-, Applikations- oder Dokumentinhalts, um die Sprache, kulturelle und andere Anforderungen eines bestimmten Zielmarktes zu erfüllen." Internationalisierung ist die "Gestaltung und Entwicklung eines Produkt-, Applikations- oder Dokumentinhaltes, die eine einfache Lokalisierung für Zielgruppen ermöglicht, die in Kultur, Region oder Sprache variieren." (Siehe W3Cs "Lokalisierung vs. Internationalisierung" .) Software erfüllt dieses Kriterium einfach dadurch, dass sie internationalisiert ist. Es ist keine Lokalisierung für eine andere Sprache erforderlich, denn sobald Software internationalisiert wurde, ist es möglich für andere, an der Lokalisierung zu arbeiten.

    Internationalization does not meaningfully apply to podtrace's output.

    Podtrace is a kernel-level tracing tool. Its user-facing output consists overwhelmingly of technical identifiers that are fixed by the systems being observed and are not translatable: kernel symbol names (tcp_v4_connect, vfs_read, do_sys_openat2), syscall names, socket address families (AF_ALG, AF_INET), Linux capability names (CAP_BPF, CAP_PERFMON), protocol identifiers (TCP, UDP, DNS, HTTP/3, QUIC, gRPC), cgroup paths, filesystem paths, and Kubernetes API object kinds and field paths. These appear identically regardless of locale, because they are the names the kernel and the Kubernetes API themselves use.

    The remaining prose is a thin layer of report section headings and summary labels wrapped around that technical content. Localizing it would degrade rather than improve usability: an operator reading a translated heading above untranslated kernel symbols must still search for those symbols in English in kernel documentation, source, and logs, so a partially translated report is harder to act on than a consistent one.

    Locale-dependent formatting defects, which are the substantive risk this criterion guards against, are absent. All timestamps are emitted in locale-independent form: RFC 3339 in structured output and an explicit UTC pattern in report filenames. The codebase performs no locale-dependent number or date formatting. Sorting throughout the diagnostic layer is by event count, timestamp, or machine identifier rather than by locale-sensitive collation of human-readable text, so no incorrect ordering behavior exists in any locale.

    Where podtrace's data is consumed by presentation layers that may serve a localized audience, it is emitted as structured data rather than prose: JSON export, OpenTelemetry traces (OTLP, Jaeger, Splunk, DataDog, Zipkin), and Prometheus metrics. Any downstream dashboard or integration can render that data in its users' language without podtrace being localized. See https://github.com/gma1k/podtrace/blob/main/docs/viewing-events.md and https://github.com/gma1k/podtrace/blob/main/docs/tracing-exporters.md


  • Andere


    Wenn die Projektseiten (Website, Repository und Download-URLs) Passwörter für die Authentifizierung von externen Benutzern speichern, müssen die Passwörter als iterierte Hashes mit einem per-User-Salt unter Verwendung eines Key-Stretching (iterierten) Algorithmus (z. B. Argon2id, Bcrypt, Scrypt, or PBKDF2). Wenn die Projektseiten hierfür keine Passwörter speichern, wählen Sie "nicht anwendbar" (N/A) aus. [sites_password_security]
    Beachten Sie, dass die Verwendung von GitHub dieses Kriterium erfüllt. Dieses Kriterium gilt nur für Passwörter, die für die Authentifizierung von externen Benutzern in die Projektseiten verwendet werden (inbound authentication). Wenn sich die Projektseiten auf anderen Seiten anmelden müssen (outbound authentication), müssen sie eventuell Authorization-Tokens für diesen Zweck anders speichern (da das Speichern eines Hashes nutzlos wäre). Dies gilt für das Kriterium crypto_password_storage zu den Projektseiten, ähnlich wie sites_https.

    The project stores no passwords for authentication of external users.

    Podtrace operates no website of its own. There is no documentation site, no GitHub Pages deployment, and no custom domain; documentation is Markdown rendered directly in the repository. All project sites are hosted by GitHub: the repository, issue tracker, discussions, and pull requests at https://github.com/gma1k/podtrace, release downloads at https://github.com/gma1k/podtrace/releases, and the container image and Helm OCI chart in GitHub Container Registry at ghcr.io/gma1k.

    All inbound authentication for these surfaces is performed by GitHub, and this criterion states that the use of GitHub meets it. The project itself neither implements nor stores credentials for external user authentication.

    Remaining project-related listings (Artifact Hub, OperatorHub.io, the krew index, pkg.go.dev, OpenSSF Scorecard, FOSSA) are third-party services not operated by the project.


 Verbesserungs-/Nacharbeits-Kontrolle 0/1

  • Vorherige Versionen


    Das Projekt MUSS die am häufigsten verwendeten älteren Versionen des Produkts beibehalten oder einen Upgrade-Pfad zu neueren Versionen bieten. Wenn der Upgrade-Pfad schwierig durchzuführen ist, muss das Projekt dokumentieren, wie das Upgrade durchgeführt werden kann (z. B. die Interfaces, die sich geändert haben, detaillierte Anleitung für die Aktualisierung des Upgrades). [maintenance_or_update]

 Berichterstattung 1/3

  • Bug-Report-Prozess


    Das Projekt MUSS ein Issue-Tracking-System zur Verwaltung einzelner Issues verwenden. [report_tracker]

    Warnung: Erfordert eine längere Begründung.


  • Anfälligkeits-Prozessbericht


    Das Projekt MUSS die Reporter/in von allen in den letzten 12 Monaten bekanntgegebenen Schwachstellenberichte aufführen, mit Ausnahme der Reporter, die Anonymität erbeten. Wurde in den letzten 12 Monaten keine Schwachstelle festgestellt, wählen Sie "nicht anwendbar" (N/A). (URL erforderlich) [vulnerability_report_credit]


    Das Projekt MUSS den Prozess für die Meldung von Schwachstellen auf der Projektseite veröffentlichen. (URL erforderlich) [vulnerability_response_process]
    Dies steht im Zusammenhang mit vulnerability_report_process, welcher erfordert, dass es eine dokumentierte Möglichkeit gibt, Schwachstellen zu melden. Es bezieht sich auch auf vulnerability_report_response, welcher eine Antwort auf Schwachstellenberichte innerhalb eines bestimmten Zeitrahmens erfordert.

    https://github.com/gma1k/podtrace/security/advisories/new [vulnerability_report_process] [osps_vm_01_01]


 Qualität 5/19

  • Programmierstil


    Das Projekt MUSS die spezifischen Codierungsstilrichtlinien für die primären Programmierprachen, die es verwendet, einhalten, und erfordern, dass die Beiträge die Bedingungen generell erfüllen. (URL erforderlich) [coding_standards]
    In den meisten Fällen erfolgt dies durch Verweis auf einige vorhandene Stilrichtlinien, möglicherweise Auflistung Unterschiede. Diese Stilrichtlinien können Möglichkeiten zur Verbesserung der Lesbarkeit und zur Verringerung der Wahrscheinlichkeit von Mängeln (einschließlich Schwachstellen) enthalten. Viele Programmiersprachen haben eine oder mehrere weit verbreitete Stilrichtlinien. Beispiele für Style Guides sind Google-Style-Guides und SEI CERT Coding Standards .


    Das Projekt MUSS automatisch dafür sorgen, dass die ausgewählten Stilrichtlinien eingehalten werden, wenn mindestens ein FLOSS-Tool vorhanden ist, welches das in der gewählten Programmiersprache tun kann. [coding_standards_enforced]
    Dies kann mit Hilfe von statischen Analysewerkzeugen und/oder durch das Durchlaufen des Codes durch Code-Umformatierer erreicht werden. In vielen Fällen ist die Werkzeugkonfiguration im Projekt-Repository enthalten (da verschiedene Projekte unterschiedliche Konfigurationen wählen können). Projekte DÜRFEN Stil Ausnahmen erlauben (und werden es in der Regel); Wo Ausnahmen getroffen werden, MÜSSEN sie selten sein und MÜSSEN dokumentiert werden an der Stelle im Code, wo sie auftreten, so dass diese Ausnahmen überprüft werden können und so dass Werkzeuge sie automatisch in der Zukunft bearbeiten können. Beispiele für solche Werkzeuge sind ESLint (JavaScript), Rubocop (Ruby) und devtools check (R).

  • Produktivsystem


    Build-Systeme für native Binärdateien MÜSSEN die relevanten Compiler- und Linker- (Umgebungs-) Variablen, die an sie übergeben werden (z.B. CC, CFLAGS, CXX, CXXFLAGS und LDFLAGS), respektieren und an Compiler- und Linker-Aufrufe weiterleiten. Ein Build-System DARF sie mit zusätzlichen Flags erweitern; Es DARF NICHT einfach die mitgelieferten Werte ersetzen. Wenn keine nativen Binärdateien erzeugt werden, wählen Sie "nicht anwendbar" (N/A). [build_standard_variables]
    Es sollte einfach sein, spezielle Build-Features wie Address Sanitizer (ASAN) zu aktivieren, oder verteilte und bewährte Best Practices einzuhalten (z.B. durch einfaches Einschalten von Compiler-Flags).


    Das Build- und Installationssystem SOLLTE Debugging-Informationen beibehalten, wenn sie in den entsprechenden Flags angefordert werden (z. B. "install -s" wird nicht verwendet). Wenn kein Build- oder Installationssystem vorhanden ist (z. B. typische JavaScript-Bibliotheken), wählen Sie "nicht anwendbar" (N / A). [build_preserve_debug]
    Z. B., die Festlegung von CFLAGS (C) oder CXXFLAGS (C ++) sollte die relevanten Debugging-Informationen erstellen, wenn diese Sprachen verwendet werden, und sie sollten während der Installation nicht ignoriert werden. Debugging-Informationen werden für Unterstützung und Analyse benötigt und sind auch nützlich, um das Vorhandensein von Härtungsmerkmalen in den kompilierten Binärdateien zu messen.


    Das Build-System für die Software, die durch das Projekt erzeugt wird, DARF NICHT rekursive Unterverzeichnisse aufbauen, wenn es Querverweise in den Unterverzeichnissen gibt. Wenn kein Build- oder Installationssystem vorhanden ist (z.B. typische JavaScript-Bibliotheken), wählen Sie "nicht anwendbar" (N / A). [build_non_recursive]
    Die interne Abhängigkeitsinformationen des Build-Systems des Projektes müssen präzise sein, andernfalls können Änderungen an dem Projekt nicht korrekt erfolgen. Falsche Builds können zu Defekten (einschließlich Schwachstellen) führen. Ein häufiger Fehler bei großen Build-Systemen ist die Verwendung eines "rekursiven Builds" oder "rekursiven Make", d.h. einer Hierarchie von Unterverzeichnissen, die Quelldateien enthalten, wobei jedes Unterverzeichnis unabhängig aufgebaut ist. Es sei denn, jedes Unterverzeichnis ist völlig unabhängig, was ist ein Fehler ist, da die Abhängigkeitsinformationen nicht korrekt sind.


    Das Projekt MUSS in der Lage sein, den Prozess der Generierung von Informationen aus Quelldateien zu wiederholen und genau das gleiche Bit-für-Bit-Ergebnis zu erhalten. Wenn kein Build auftritt (z. B. Skriptsprachen, in denen der Quellcode direkt verwendet wird, anstatt kompiliert zu werden), wählen Sie "nicht anwendbar" (N / A). [build_repeatable]
    GCC- und Clang-Benutzer finden die Option -frandom-seed womöglich nützlich; In manchen Fällen kann dies dadurch gelöst werden, dass man eine Sortierreihenfolge erzwingt. Weitere Vorschläge finden Sie auf der reproducible Build Seite.

  • Installationssystem


    Das Projekt MUSS eine Möglichkeit zur einfachen Installation und Deinstallation der Software haben, unter Benutzung einer häufig verwendeten Methode. [installation_common]
    Beispiele hierfür sind die Verwendung eines Paketmanagers (auf dem System- oder Sprachniveaus), "make install/uninstall" (unterstützt DESTDIR), einem Container im Standardformat oder ein virtuelles Maschinenbild im Standardformat. Der Installations- und Deinstallationsvorgang (z.B. seine Verpackung) DARF von einem/einer Dritten implementiert werden, solange es FLOSS ist.


    Das Installationssystem für den/die Endbenutzer/in MUSS Standardkonventionen zur Auswahl des Zielortes, in dem gebildete Artefakte zur Installationszeit geschrieben werden, folgen. Zum Beispiel, wenn es Dateien auf einem POSIX-System installiert, muss es die DESTDIR-Umgebungsvariable verwenden. Wenn es kein Installationssystem oder keine Standardkonvention gibt, wählen Sie "nicht anwendbar" (N/A). [installation_standard_variables]


    Das Projekt MUSS einen Weg für potenzielle Entwickler bereithalten, um schnell alle erforderlich Projektergebnisse und Support-Umgebungen zu installieren, um Änderungen vornehmen zu können, einschließlich der Tests und Test-Umgebung. Dies MUSS mit einer gängigen Methode durchgeführt werden können. [installation_development_quick]
    Dies DARF mit einem generierten Container- und/oder Installationsskript(en) implementiert werden. Externe Abhängigkeiten würden typischerweise durch das Aufrufen von System- und/oder Sprachpaketmanager(n), als external_dependencies, installiert.

    [osps_do_07_01]


  • Externe gepflegte Komponenten


    Das Projekt MUSS externe Abhängigkeiten in computerlesbarer Form auflisten. (URL erforderlich) [external_dependencies]
    Dies geschieht in der Regel mit den Konventionen des Paketmanagers und / oder des Buildsystems. Dies hilft auch installation_development_quick zu erfüllen.

    [osps_br_05_01]

    Warnung: URL erforderlich, aber keine URL gefunden.



    Projekte MÜSSEN ihre externen Abhängigkeiten (einschließlich Bequemlichkeitskopien) überwachen oder regelmäßig überprüfen, um bekannte Schwachstellen zu erkennen und ausnutzbare Schwachstellen zu beheben oder sie als unausweichlich zu verifizieren. [dependency_monitoring]
    Dies kann mit einem Ursprungsanalysator / Abhängigkeitsüberprüfungswerkzeug / Softwarezusammensetzungsanalysator wie OWASPs Dependency-Check, Sonatypes Nexus Auditor, Synopsys' Black Duck Software Composition Analysis, und Bundler-Audit (für Ruby) erreicht werden. Einige Paketmanager beinhalten Mechanismen, um dies zu tun. Es ist akzeptabel, wenn die Anfälligkeit der Komponenten nicht ausgenutzt werden kann, aber diese Analyse ist schwierig und es ist manchmal einfacher, den Part einfach zu aktualisieren oder zu reparieren.

    Each workflow and job declares a narrowly scoped permissions: block: contents: read for build/test/lint/scan jobs, pull-requests: write only for labeling, security-events: write only for CodeQL upload, and contents: write / packages: write / id-token: write only in release jobs. [osps_vm_05_03]



    Das Projekt MUSS entweder:
    1. Es einfach machen, wiederverwendbare extern gepflegte Komponenten zu identifizieren und zu aktualisieren;oder
    2. Die Standardkomponenten des Systems oder der Programmiersprache verwenden.
    Dann, wenn eine Schwachstelle in einer wiederverwendeten Komponente gefunden wird, wird es einfach sein diese Komponente zu aktualisieren. [updateable_reused_components]
    Ein typischer Weg, um dieses Kriterium zu erfüllen, ist die Verwendung von System- und Programmiersprachen-Paketverwaltungssystemen. Viele FLOSS-Programme werden mit "Convenience-Bibliotheken" ausgestattet, die lokale Kopien der Standardbibliotheken (ggf. geforkt) enthalten. Prinzipiell ist das gut. Wenn jedoch das Programm diese lokalen (geforkten) Kopien verwenden *muss*, dann wird die Aktualisierung der "Standard"-Bibliotheken, als Sicherheitsupdate, diese zusätzlichen Kopien immer noch verwundbar lassen. Dies ist vor allem ein Problem für Cloud-basierte Systeme; Wenn der Cloud-Provider seine "Standard"-Bibliotheken aktualisiert, aber das Programm sie nicht verwendt, dann helfen die Updates nicht wirklich. Siehe z.B. "Chromium: Why it isn't in Fedora yet as a proper package" von Tom Callaway .

    [osps_qa_02_01]



    Das Projekt SOLLTE vermeiden veraltete oder obsolete Funktionen und APIs zu verwenden, für die FLOSS-Alternativen in der eingesetzten Technologie verfügbar sind (ihr "Technologie-Stack") und eine Supermajorität der Benutzer, die das Projekt unterstützt (so dass die Benutzer den Zugriff auf die Alternative haben ). [interfaces_current]

  • Automatisierte Test-Suite


    Eine automatisierte Test-Suite MUSS bei jedem Check-In auf ein gemeinsames Repository für mindestens einen Zweig angewendet werden. Diese Test-Suite muss einen Bericht über Erfolg oder Misserfolg des Testes produzieren. [automated_integration_testing]
    Diese Anforderung kann als Teilmenge von test_continuous_integration angesehen werden, konzentriert sich aber nur auf das Testen, ohne eine kontinuierliche Integration zu fordern.

    [test_continuous_integration] [osps_qa_06_01]



    Das Projekt MUSS Regressionstests zu einer automatisierten Test-Suite hinzufügen für mindestens 50% der, in den letzten sechs Monaten, gefixten Bugs. [regression_tests_added50]


    Das Projekt MUSS automatisierte FLOSS-Test-Suite(s) haben, die mindestens 80% Aussage Berichterstattung haben, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Sprache erfüllen kann. [test_statement_coverage80]
    Viele FLOSS-Tools stehen zur Verfügung, um die Test-Coverage zu beurteilen, einschließlich gcov/lcov, Blanket.js, Istanbul, JCov, und covr (R). Beachten Sie, dass das Erfüllen dieses Kriteriums keine Garantie dafür ist, dass die Test-Suite gründlich ist, hingegen ist das Verfehlen dieses Kriteriums ein starker Indikator für eine schlechte Test-Suite.

  • Neue Funktionalitätsüberprüfung


    Das Projekt MUSS eine formale schriftliche Richtlinie dazu haben, wie wichtige neue Funktionalität hinzugefügt werden. Tests für die neue Funktionalität MÜSSEN zu einer automatisierten Test-Suite hinzugefügt werden. [test_policy_mandated]

    [tests_documented_added] [osps_qa_06_03]



    Das Projekt MUSS in seinen dokumentierten Anweisungen für Änderungsvorschläge die Richtlinien enthalten, die Tests für große neue Funktionalität hinzugefügt werden sollen. [tests_documented_added]
    Allerdings ist auch eine informelle Regel akzeptabel, solange die Tests in der Praxis hinzugefügt werden.

    Warnung: Erfordert eine längere Begründung.


  • Warnhinweise


    Projekte MÜSSEN praktischerweise sehr streng mit Warnungen in der Projektsoftware sein. [warnings_strict]
    Bei manchen Projekten können einige Warnungen effektiv nicht aktiviert werden. Was benötigt wird, ist ein Beleg dafür, dass das Projekt danach strebt, Warnungen zu aktivieren, wo es möglich ist, so dass Fehler frühzeitig erkannt werden.

    Warnung: Erfordert eine längere Begründung.


 Sicherheit 1/13

  • Wissen über sichere Entwicklungspraktiken


    Das Projekt MUSS sichere Designprinzipien (von "know_secure_design"), soweit anwendbar, umsetzen. Wenn das Projekt keine Software produziert, wählen Sie "nicht anwendbar" (N/A). [implement_secure_design]
    Beispielsweise sollten die Projektergebnisse fehlersichere Vorgaben haben (Zugriffsentscheidungen sollten standardmäßig verweigert werden und die Installation von Projekten sollte standardmäßig sicher sein). Die Projektergebnisse sollten auch eine vollständige Vermittlung haben (jeder Zugang, der begrenzt werden kann, muss auf Autorität überprüft werden und nicht umgangen werden können). Beachten Sie, dass in einigen Fällen Prinzipien in Konflikt geraten, in welchen eine Entscheidung getroffen werden muss (z.B. viele Mechanismen können die Dinge komplexer machen, gegen die "Wirtschaftlichkeit des Mechanismus" verstoßen / halten Sie es einfach).

  • Verwende grundlegend gute kryptographische Praktiken

    Beachten Sie, dass einige Software keine kryptographischen Mechanismen verwenden muss. Wenn Ihr Project Software erstellt das (1) kryptographische funktionen einbindet, aktiviert, oder ermöglicht und (2) aus den USA heraus an nicht US-Bürger verteilt wird, dann könnten sie rechtlich zu weiterne Schritten gezwungen sein. Meistens beinhaltet dies lediglich das Senden einer E-Mail. Für mehr Informationen, siehe den Abschnitt zu Encryption in Understanding Open Source Technology & US Export Controls.

    Die Standard-Sicherheitsmechanismen innerhalb der Projektsoftware DÜRFEN NICHT von kryptographischen Algorithmen oder Modi mit bekannten schweren Mängeln abhängen (z.B. der SHA-1-Kryptographie-Hash-Algorithmus oder der CBC-Modus in SSH). [crypto_weaknesses]
    Sorgen über den CBC-Modus in SSH werden in CERT: SSH CBC vulnerability erläutert.

    Warnung: Erfordert eine längere Begründung.



    Das Projekt SOLLTE mehrere kryptographische Algorithmen unterstützen, so dass Benutzer schnell wechseln können, wenn eines defekt ist. Verbreitete symmetrische Schlüsselalgorithmen umfassen AES, Twofish und Serpent. Verbreitete kryptographische Hash-Algorithmus-Alternativen umfassen SHA-2 (einschließlich SHA-224, SHA-256, SHA-384 UND SHA-512) und SHA-3. [crypto_algorithm_agility]


    Das Projekt MUSS die Speicherung von Anmeldeinformationen (z.B. Passwörter und dynamische Token) und private kryptografische Schlüssel in Dateien, die von anderen Informationen getrennt sind (z.B. Konfigurationsdateien, Datenbanken und Protokolle), unterstützen und den Benutzern erlauben, sie ohne Code-Neukompilierung zu aktualisieren und zu ersetzen . Wenn das Projekt keine Anmeldeinformationen und private kryptographische Schlüssel verarbeitet, wählen Sie "nicht anwendbar" (N/A). [crypto_credential_agility]


    Die vom Projekt produzierte Software SOLLTE sichere Protokolle für alle Netzwerkkommunikationen unterstützen , wie SSHv2 oder höher, TLS1.2 oder höher (HTTPS), IPsec, SFTP und SNMPv3. Unsichere Protokolle wie FTP, HTTP, Telnet, SSLv3 oder früher, und SSHv1 SOLLTEN standardmäßig deaktiviert werden und nur aktiviert werden, wenn der/die Benutzer/in es speziell konfiguriert. Wenn die vom Projekt produzierte Software keine Netzwerkkommunikation verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_used_network]


    Wenn die Software, die durch das Projekt produziert wird, TLS unterstützt oder verwendet, SOLLTE sie mindestens TLS Version 1.2 verwenden. Beachten Sie, dass der Vorgänger von TLS SSL genannt wurde. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_tls12]


    Die Software, die vom Projekt produziert wird, muss, wenn es TLS unterstützt, die TLS-Zertifikatsüberprüfung standardmäßig bei der Verwendung von TLS, einschließlich auf Subresources, durchführen. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_certificate_verification]
    Beachten Sie, dass eine falsche TLS-Zertifikatsüberprüfung ein häufiger Fehler ist. Weitere Informationen finden Sie unter "The Most Dangerous Code in the World: Validating SSL Certificates in Non-Browser Software" von Martin Georgiev et al. und "Do you trust this application?" von Michael Catanzaro.


    Die Software, die vom Projekt produziert wird, MUSS, wenn sie TLS unterstützt, eine Zertifikatsüberprüfung durchführen, bevor HTTP-Header mit privaten Informationen (wie z.B. sichere Cookies) versendet werden. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_verification_private]

  • Sicheres Release


    Das Projekt MUSS kryptographisch unterschriebene Releases der Projektergebnisse aufzeichnen, die für weit verbreitete Verwendung gedacht sind, und es MUSS ein dokumentierter Prozess sein, der den Benutzern/innen erklärt, wie sie die öffentlichen Signaturschlüssel erhalten und die Signatur(en) überprüfen können. Der private Schlüssel für diese Signatur(en) MUSS NICHT auf der Seite(n) verwendet werden, die öffentlich zugänglich sind. Wenn Releases nicht für eine weit verbreitete Verwendung bestimmt sind, wählen Sie "nicht anwendbar" (N/A). [signed_releases]
    Die Projektergebnisse umfassen sowohl Quellcode als auch alle erzeugten Ergebnisse, falls zutreffend (z. B. ausführbare Dateien, Pakete und Container). Generierte Ergebnisse können separat vom Quellcode signiert werden. Diese DÜRFEN als signierte git-Tags (mit kryptographischen digitalen Signaturen) implementiert werden. Projekte DÜRFEN generierte Ergebnisse getrennt von Werkzeugen wie git behandeln, aber in diesen Fällen MÜSSEN die separaten Ergebnisse separat unterzeichnet werden.

    [osps_do_03_02]



    Es wird empfohlen, dass in dem Versionskontrollsystem jeder wichtige Versions-Tag (ein Tag, der Teil eines Hauptrelease, eines kleineren Release, oder eines Fixes, öffentlich gemeldeten Schwachstellen, ist) kryptographisch signiert und verifizierbar ist, wie in Signed_releases. [version_tags_signed]

  • Andere Sicherheitsissues


    Die Projektergebnisse MÜSSEN alle Eingaben aus potenziell nicht vertrauenswürdigen Quellen überprüfen, um sicherzustellen, dass sie gültig sind (eine *Allowliste*) und ungültige Eingaben ablehnen, wenn überhaupt Einschränkungen für die Daten vorliegen. [input_validation]
    Beachten Sie, dass der Vergleich der Eingabe mit einer Liste von "schlechten Formaten" (aka einer *Denylist*) normalerweise nicht ausreicht, weil Angreifer oft um eine Denyliste herumarbeiten können. Insbesondere werden Zahlen in interne Formate konvertiert und dann überprüft, ob sie zwischen ihrem Minimum und Maximum (inklusive) liegen und Textstrings werden überprüft, um sicherzustellen, dass sie gültige Textmuster haben (z.B. gültige UTF-8, Länge, Syntax, etc.). Einige Daten müssen möglicherweise "irgendetwas" (z. B. ein Datei-Uploader) sein, aber das ist typischerweise selten der Fall.


    Härtungsmechanismen SOLLTEN in der Software, die das Project entwickelt, verwendet werden, so dass Softwarefehler weniger wahrscheinlich zu Sicherheitslücken führen. [hardening]
    Härtungsmechanismen können HTTP-Header enthalten wie Content Security Policy (CSP), oder Compiler-Flags (z.B. -fstack-protector), um Angriffe zu mildern, oder Compiler-Flags, um undefiniertes Verhalten zu eliminieren. Für unsere Zwecke wird das Prinzip des kleinsten Privilegs nicht als Verhärtungsmechanismus betrachtet (trotzdem ist es wichtig, aber an anderer Stelle).


    Das Projekt MUSS einen "Assurance Case" bereithalten, der rechtfertigt, wie die Sicherheitsanforderungen erfüllt werden. Der Assurance Case muss Folgendes beinhalten: eine Beschreibung des Bedrohungsmodells, eine eindeutige Identifizierung von Vertrauensgrenzen, eine Beschreibung wie sichere Designprinzipien angewendet wurden, und eine Beschreibung wie die üblichen Implementierungssicherheitsschwächen beseitige wurden. (URL erforderlich) [assurance_case]
    Ein "Assurance Case" ist ein dokumentierter Beweis, der ein überzeugendes und gültiges Argument enthällt, dass ein bestimmter Satz kritischer Ansprüche bezüglich der Eigenschaften eines Systems für eine gegebene Anwendung in einer gegebenen Umgebung hinreichend erfüllt ist ("Software Assurance Using Structured Assurance Case Models", Thomas Rhodes et al., NIST Interagency Report 7608 ). Vertrauensgrenzen sind Grenzen, in denen Daten oder Ausführung ihr Vertrauensniveau ändern, z.B. die Grenzen eines Servers in einer typischen Webanwendung. Es ist üblich, sichere Designprinzipien (wie Saltzer und Schroeer) und gemeinsame Implementierungssicherheitsschwächen (wie die OWASP Top 10 oder CWE/SANS Top 25) aufzurufen und zu zeigen, wie diesen entgegengewirkt wird. Die BadgeApp Assurance Case kann ein nützliches Beispiel sein. Dies bezieht sich auf documentation_security, documentation_architecture und implement_secure_design.

    Every workflow in .github/workflows/ declares an explicit top-level permissions: block scoped to the minimum needed (contents: read for all CI/test/scan workflows), so no job inherits broader permissions than the pipeline grants. [osps_sa_03_01]

    Warnung: URL erforderlich, aber keine URL gefunden.


 Analyse 0/2

  • Statische Codeanalyse


    Das Projekt MUSS mindestens ein statisches Analyse-Tool mit Regeln oder Ansätzen verwenden, um nach bekannten Schwachstellen in der analysierten Sprache oder Umgebung zu suchen, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Sprache implementieren kann. [static_analysis_common_vulnerabilities]
    Statische Analysetools, die speziell dafür entwickelt wurden, nach Schwachstellen zu suchen, finden diese eher. Das heißt, dass die Verwendung von statischen Tools in der Regel helfen wird einige Probleme zu finden. Wir schlagen dies vor, aber erwarten es für das "passing" -Level-Badge nicht.

    Warnung: Erfordert eine längere Begründung.


  • Dynamische Codeanalyse


    Wenn die Projektsoftware Software mit einer speicherunsicheren Sprache (z.B. C oder C ++) enthält, MUSS mindestens ein dynamisches Werkzeug (z.B. ein Fuzzer oder ein Web-Applikationsscanner) routinemäßig in Kombination mit einem Mechanismus verwendet werden, welche Speichersicherheitsproblemen wie Puffer-Cach Überschreibe erkennen. Wenn das Projekt keine Software verwendet, die in einer speicherunsicheren Sprache geschrieben ist, wählen Sie "nicht anwendbar" (N/A). [dynamic_analysis_unsafe]
    Beispiele für Mechanismen zur Erkennung von Arbeitsspeicher Sicherheitsproblemen sind Adresse Sanitizer (ASAN) (verfügbar in GCC und LLVM), Memory Sanitizer und valgrind. Andere möglicherweise verwendete Werkzeuge sind Thread Sanitizer und Undefined Behavior Sanitizer. Weit verbreitete Assertions würden auch funktionieren.

    Warnung: Erfordert eine längere Begründung.



Diese Daten sind unter der Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0) verfügbar. Dies bedeutet, dass ein Datenempfänger die Daten mit oder ohne Änderungen weitergeben darf, solange der Datenempfänger den Text dieser Vereinbarung mit den weitergegebenen Daten zur Verfügung stellt. Bitte nennen Sie Ghassan Malke und die OpenSSF Best Practices Badge-Mitwirkenden als Urheber.

Projekt-Badge-Eintrag im Besitz von: Ghassan Malke.
Eintrag erstellt: 2026-05-18 11:01:40 UTC, zuletzt aktualisiert: 2026-08-06 19:53:50 UTC. Letztes erreichtes Badge: 2026-05-18 11:12:38 UTC.