wasmCloud

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 6363 ist silver 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/6363/badge)](https://www.bestpractices.dev/projects/6363)
oder indem Sie Folgendes in Ihr HTML einbetten:
<a href="https://www.bestpractices.dev/projects/6363"><img src="https://www.bestpractices.dev/projects/6363/badge"></a>


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

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

        

 Grundlagen 3/5 ●

  • Allgemein

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

    wasmCloud is a cloud native platform for running WebAssembly workloads across any cloud, Kubernetes, datacenter, or edge.

    Using wasmCloud, you can run microservices, functions, and agents as ultra-dense, deny-by-default bytecode sandboxes that are far more secure and efficient than traditional containers.

    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 Silber-Siegel erreichen. [achieve_silver]

  • Projektüberwachung


    Das Projekt MUSS einen "Busfaktor" 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.

    At least eight people each made 20 or more commits in the past year, MAINTAINERS.md (https://github.com/wasmCloud/wasmCloud/blob/main/MAINTAINERS.md) lists the maintainer teams, and CODEOWNERS assigns every path to the org-maintainers team. Releases are automated (RELEASE_RUNBOOK.md), so no single person is required to keep the project going.



    Das Projekt MUSS mindestens zwei unabhängige bedeutende Entwickler haben. (URL erforderlich) [contributors_unassociated]
    Die Mitwirkenden sind assoziiert, wenn sie von der gleichen Organisation (als Angestellter oder Auftragnehmer) bezahlt werden und die Organisation von den Ergebnissen des Projekts profitieren wird. Finanzielle Zuschüsse aus derselben Organisation zählen nicht, wenn sie durch andere Organisationen gehen (z.B. werden wissenschaftliche Zuschüsse, die an verschiedene Organisationen von einer gemeinsamen Regierung oder NGO-Quelle gezahlt werden, nicht dazu führen, dass die Mitwirkenden assoziiert werden). Jemand ist ein/e wichtige/r Mitwirkende/r, wenn sie/er im vergangenen Jahr nicht-triviale Beiträge zum Projekt geleistet hat. Beispiele für gute Indikatoren für einen bedeutenden Mitwirkenden sind: mindestens 1.000 Zeilen Code geschrieben, 50 Commits erarbeitet oder mindestens 20 Seiten zur Dokumentation beigetragen.

    In the past year the repository received significant contributions from several contributors not associated with the organization that employs most maintainers, including if0ne, Aditya Salunkhe, Junji Takakura and Pavel Agafonov. See https://github.com/wasmCloud/wasmCloud/graphs/contributors.


  • Andere


    Das Projekt MUSS eine Lizenzerklärung in jeder Quelldatei enthalten. Dies DARF als Kommentar relativ am Anfangs jeder Datei einfügt sein: SPDX-License-Identifier: [SPDX license expression for project]. [license_per_file]
    Dies DARF auch durch die Einbeziehung einer Erklärung in natürlicher Sprache geschehen, die die Lizenz kennzeichnet. Das Projekt DARF auch eine stabile URL enthalten, die auf den Lizenztext oder den vollständigen Lizenztext hinweist. Beachten Sie, dass das Kriterium license_location die Projektlizenz an einem Standardstandort benötigt. Weitere Informationen zu SPDX-Lizenzausdrücken finden Sie unter SPDX-Tutorial . Beachten Sie die Beziehung zu copyright_per_file , deren Inhalt typischerweise den Lizenzinformationen vorausgeht.

 Verbesserungs-/Nacharbeits-Kontrolle 4/4 ●

  • Öffentliches Versionskontroll-Source-Repository


    Das Source-Repository des Projekts MUSS eine geläufige, verteilte Versionskontrollsoftware (z. B. git oder mercurial) verwenden. [repo_distributed]
    Git ist nicht speziell gefordert und Projekte können andere zentralisierte Versionskontrollsoftware (wie z. B. Subversion) mit Rechtfertigung verwenden.

    Repository on GitHub, which uses git. git is distributed.



    Das Projekt MUSS eindeutig kleine Aufgaben identifizieren, die von neuen oder gelegentlichen Mitwirkenden durchgeführt werden können. (URL erforderlich) [small_tasks]
    Diese Identifizierung erfolgt in der Regel durch die Markierung ausgewählter Ausgaben in einem Issue-Tracker mit einem oder mehreren Tags, die das Projekt für den Zweck verwendet, z.B. up-for-Grabs , First-Timers-only , "Small fix", Microtask oder IdealFirstBug. Diese neuen Aufgaben müssen nicht das Hinzufügen von Funktionalität beinhalten. Sie können die Dokumentation verbessern, Testfälle hinzufügen oder irgendetwas anderes, das das Projekt unterstützt und den Mitwirkenden hilft mehr über das Projekt zu verstehen.

    Small tasks for new contributors are labeled "good first issue": https://github.com/wasmCloud/wasmCloud/labels/good%20first%20issue



    Das Projekt MUSS eine Zwei-Faktor-Authentifizierung (2FA) für Entwickler haben, um ein zentrales Repository zu wechseln oder auf sensible Daten zugreifen zu können (z. B. private Schwachstellen-Berichte). Dieser 2FA-Mechanismus DARF Mechanismen ohne kryptographische Mechanismen wie SMS verwenden, obwohl dies nicht empfohlen wird. [require_2FA]

    GitHub requires 2FA as of March 2023. [osps_ac_01_01]



    Die Zwei-Faktor-Authentifizierung des Projekts (2FA) SOLLTE Kryptographie-Mechanismen verwenden, um Identitätswechsel zu verhindern. Short-Message-Service-/SMS-basierte 2FAs allein erfüllen dieses Kriterium nicht, da sie nicht verschlüsselt sind. [secure_2FA]
    Ein 2FA-Mechanismus, der dieses Kriterium erfüllt, wäre eine Time-Based-One-Time-Password-/TOTP-Anwendung, die automatisch einen Authentifizierungscode generiert, der sich nach einer gewissen Zeit ändert. Beachten Sie, dass GitHub TOTP unterstützt.

    The organization requires 2FA but does not yet restrict members to cryptographic methods; we plan to enable GitHub's secure-methods-only setting.


 Qualität 4/7 ●

  • Programmierstil


    Das Projekt MUSS seine Code-Review-Anforderungen dokumentieren, einschließlich, wie Code-Überprüfung durchgeführt wird, was überprüft werden muss und was erforderlich ist, um akzeptabel zu sein. (URL erforderlich) [code_review_standards]
    Siehe auch two_person_review und contribution_requirements.

    The main branch ruleset requires a pull request with at least one approving code-owner review, dismisses stale approvals on push, and requires approval of the most recent push, so every change is reviewed by someone other than its author before merge and release. Required status checks must also pass.

    Documentation for code review practices are covered in https://github.com/wasmCloud/wasmCloud/blob/main/CONTRIBUTING.md#code-review.



    Das Projekt MUSS mindestens 50% aller vorgeschlagenen Änderungen vor dem Release durch eine andere Person als den Autor überprüfen, um festzustellen, ob es sich um eine sinnvolle Änderung handelt und frei von bekannten Problemen ist, die gegen die Freigabe der Änderung sprechen würden [two_person_review]

    The main branch ruleset requires a pull request with at least one approving code-owner review, dismisses stale approvals on push, and requires approval of the most recent push, so every change is reviewed by someone other than its author before merge and release. Required status checks must also pass.


  • Produktivsystem


    Das Projekt MUSS ein reproducible Build haben. Wenn kein Building erforderlich ist (z. B. Skriptsprachen, in denen der Quellcode direkt verwendet wird, anstatt kompiliert zu werden), wählen Sie "nicht anwendbar" (N/A). (URL erforderlich) [build_reproducible]
    Eine reproduzierbares Build bedeutet, dass mehrere Parteien den Prozess der Generierung von Informationen aus Quelldateien unabhängig voneinander wiederholen und genau das gleiche Bit-für-Bit-Ergebnis erhalten können. In manchen Fällen kann dies dadurch gelöst werden, dass man eine Sortierreihenfolge erzwingt. JavaScript-Entwickler können erwägen npm shrinkwrap und webpack OccurenceOrderPlugin zu verwenden. GCC und clang Benutzer könnten die Option -frandom-seed nützlich finden. Die Buildumgebung (einschließlich des Toolsets) kann oft für externe Teilnehmer definiert werden, indem der kryptografische Hash eines bestimmten Containers oder einer virtuellen Maschine angegeben wird, die sie für das Kompilieren verwenden können. Das Reproducible Builds Projekt hat eine Dokumentation, wie dies erreicht werden kann.

    Release builds pin all inputs (Cargo.lock, go.sum, SHA-pinned actions, digest-pinned base images) and set SOURCE_DATE_EPOCH from the commit timestamp, but bit-for-bit reproducibility is not yet verified.


  • Automatisierte Test-Suite


    Eine Test-Suite MUSS in einer standardisierten Weise für diese Programmiersprache anrufbar sein. (URL erforderlich) [test_invocation]
    Zum Beispiel, "make check", "mvn test", oder "rake test" (Ruby).

    cargo test (after cargo xtask build-fixtures) for the Rust workspace and go test ./... for the operator and gateway: https://github.com/wasmCloud/wasmCloud/blob/main/CONTRIBUTING.md#running-tests



    Das Projekt MUSS eine kontinuierliche Integration implementieren, bei der neue oder geänderte Codes häufig in ein zentrales Code-Repository integriert werden und automatisierte Tests auf dem Ergebnis durchgeführt werden. (URL erforderlich) [test_continuous_integration]
    In den meisten Fällen bedeutet dies, dass jeder Entwickler, der Vollzeit auf dem Projekt arbeitet, mindestens täglich integriert.

    Every pull request and every push to main runs the Rust, Go, component, coverage and Kubernetes end-to-end suites in GitHub Actions, and merges require the gate check to pass: https://github.com/wasmCloud/wasmCloud/actions



    Das Projekt MUSS automatisierte FLOSS-Test-Suite(n) einsetzen, die mindestens 90% der Befehle abdecken, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Programmiersprache messen kann. [test_statement_coverage90]

    Coverage is measured on every push to main with cargo-llvm-cov and enforced at 80% (https://github.com/wasmCloud/wasmCloud/actions/workflows/coverage.yml); the latest run reports 83% line coverage, below 90%.



    Das Projekt MUSS automatisierte FLOSS-Test-Suite(s) mit mindestens 80% Zweig-Abdeckung haben, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Sprache messen kann. [test_branch_coverage80]

    Coverage is measured on every push to main with cargo-llvm-cov, a FLOSS tool (https://github.com/wasmCloud/wasmCloud/actions/workflows/coverage.yml), and the job fails below 80% line and 80% region coverage (xtask/src/coverage.rs). Branch coverage is not measured yet. LLVM region coverage counts each side of a condition as its own region, so it is close to branch coverage, but it is not the same metric. We plan to enable llvm-cov branch coverage and hold it at 80%.


 Sicherheit 3/5 ●

  • 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 vom Projekt produzierte Software MUSS 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 MÜSSEN 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]

    Outbound connections default to encrypted protocols: OCI registry pulls use HTTPS unless an operator explicitly sets --allow-insecure-registries (default false), outbound wasi:http requests to https:// hosts use TLS, and NATS connections support TLS (and TLS-first) with CA and client certificates. Inbound HTTP ingress supports TLS (--tls-cert-path/--tls-key-path). Plain HTTP ingress remains available for deployments where a gateway or ingress controller terminates TLS in front of the host.



    Die Projektsoftware MUSS, wenn sie TLS unterstützt oder verwendet, mindestens TLS Version 1.2 unterstützen. 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]

    All TLS in wasmCloud uses rustls 0.23 (with the aws-lc-rs provider), via rustls, tokio-rustls, hyper-rustls, reqwest's rustls-tls and oci-client's rustls-tls features (workspace Cargo.toml). rustls implements only TLS 1.2 and TLS 1.3 and has no support for SSL or TLS 1.0/1.1.


  • Gesicherte Zustellung gegen Man-in-the-Middle-/MITM-Angriffe


    Die Projekt-Website, das Repository (wenn über das Internet zugänglich) und die heruntergelandenen Seiten (falls separat) MÜSSEN Key-Hardening-Headers mit nichtpermeablen Werten enthalten. (URL erforderlich) [hardened_site]
    Beachten Sie, dass GitHub und GitLab bekannt bekannterweise dies erfüllen. Websites wie https://securityheaders.io/ können dies schnell überprüfen. Die wichtigsten Key-Hardening-Header sind: Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), X-Content-Type-Options (as "nosniff"), and X-Frame-Options. Komplett statische websiten die keine Möglichkeit für das anmelden auf der webseite erlauben können vermutlich mit geringer Gefahr einige Hardening-Headers weglassen; es gibt jedoch keine verlässliche Methode solche Seiten zu identifizieren und deshalb erfordern wir diese Headers auch auf voll statischen Webseiten.

    Required security hardening headers missing: https://wasmcloud.com: content-security-policy


  • Andere Sicherheitsissues


    Das Projekt MUSS innerhalb der letzten 5 Jahre eine Sicherheitsüberprüfung durchgeführt haben. Diese Überprüfung muss die Sicherheitsanforderungen und die Sicherheitsgrenze berücksichtigen. [security_review]
    Dies DARF durch die Projektmitglieder und/oder eine unabhängige Bewertung geschehen. Diese Bewertung kann durch statische und dynamische Analyse-Tools unterstützt werden, aber es muss auch eine menschliche Überprüfung sein, um Probleme zu identifizieren (insbesondere im Design), die Werkzeuge nicht erkennen können.

    Per security-insights.yml: repository.security.assessments.third-party=[{"name" => "OSTIF and Trail of Bits security audit", "evidence" => "https://ostif.org/wp-content/uploads/2023/10/wasmcloud-audit-ostif-trail-of-bits-final.pdf", "date" => "2023-10-17", "comment" => "Covered wasmCloud 1.x. The 2.x host in this repository replaced the audited code."}]



    Härtungsmechanismen müssen in der Projektsoftware verwendet werden, so dass Softwarefehler weniger wahrscheinlich zu Sicherheitslücken führen. (URL erforderlich) [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).

    wasmCloud uses several hardening mechanisms so that defects are less likely to become vulnerabilities:

    • Memory-safe languages and denied undefined behavior: the host, CLI and plugins are Rust and the operator and gateway are Go. The Rust workspace denies unsafe_code for every crate ([workspace.lints.rust] in Cargo.toml, with warnings also denied); the few exceptions are individually annotated #[allow(unsafe_code)] sites for OS FFI and environment mutation, each with a SAFETY comment.
    • Lints that eliminate crash and misuse classes: the workspace denies clippy's unwrap_used, expect_used, panic, indexing_slicing, panicking_unwrap, transmute_ptr_to_ref, transmute_undefined_repr and serde_api_misuse ([workspace.lints.clippy] in Cargo.toml), so an unexpected input yields an error instead of a panic, an out-of-bounds index, or an unsound transmute.
    • Compiler and linker hardening: Rust release binaries are built with the toolchain's default mitigations for Linux targets (position-independent executables, full RELRO, non-executable stack and data, and stack probes against stack clashing), and Go binaries get the Go runtime's bounds checking and stack guards.
    • Sandboxing of untrusted code: guest WebAssembly runs in wasmtime with bounds-checked linear memory and guard pages, structured control flow (Wasm-level control-flow integrity), Spectre mitigations on memory and table accesses, and epoch-based interruption, so a defect in guest code cannot read or write host memory.
    • Resource limits: per-workload and host-wide limits on guest memory, connections and file descriptors (crates/wash-runtime/src/engine/guest_memory.rs, crates/wash-runtime/src/host/quota.rs) keep a defect from exhausting the host.
    • Continuous checks: CodeQL, zizmor, cargo audit and cargo deny run in CI.

    Warnung: URL erforderlich, aber keine URL gefunden.


 Analyse 1/2 ●

  • Dynamische Codeanalyse


    Das Projekt MUSS mindestens ein dynamisches Analyse-Tool auf jeden kommenden Hauptproduktionsrelease der Software, die durch das Projekt vor seiner Freigabe produziert wird, anwenden. [dynamic_analysis]
    Ein dynamisches Analyse-Tool untersucht die Software, indem es sie mit bestimmten Eingaben ausführt. Beispielsweise DARF das Projekt ein Fuzzing-Tool verwenden (z.B. American Fuzzy Lop) oder einen Web Application Scanner (z.B. OWASP ZAP oder w3af). In einigen Fällen ist das OSS-Fuzz Projekt bereit, Fuzz-Tests auf Ihr Projekt anzuwenden. Für die Zwecke dieses Kriteriums muss das dynamische Analyse-Tool die Eingaben in irgendeiner Weise variieren, um nach verschiedenen Arten von Problemen zu suchen oder eine automatisierte Test-Suite mit mindestens 80% Zweig-Abdeckung sein. Die Englische Wikipedia-Seite zur dynamischen Analysen und die OWASP Seite über Fuzzing nennen einige dynamische Analyse-Tools. Das Analyse-Tool(s) DARF für der Suche nach Sicherheitslücken eingesetzt werden, aber das ist nicht erforderlich.

    Every release candidate passes the full automated test suites in CI (Rust unit and integration tests, component fixtures, Kubernetes end-to-end tests), with coverage measured by cargo-llvm-cov at 83% of lines and enforced at 80% of lines and regions (https://github.com/wasmCloud/wasmCloud/actions/workflows/coverage.yml). Branch coverage is not yet measured, and fuzzing is not yet part of the release process: the operator has Go native fuzz targets (e.g. runtime-operator/api/runtime/v1alpha1/workload_fuzz_test.go) whose seed corpora run with the regular tests, but they are not fuzzed before release. We plan to add a pre-release fuzzing job.



    Das Projekt SOLLTE viele Laufzeit-Assertionen in der Projektsoftware enthalten und diese Assertionen während der dynamischen Analyse überprüfen. [dynamic_analysis_enable_assertions]
    Dieses Kriterium schlägt nicht vor, Assertions in der Produktionsumgebung zu aktivieren; das liegt ganz beim Projekt und seinen Benutzern. Stattdessen liegt der Fokus dieses Kriteriums darauf, die Fehlererkennung während der dynamischen Analyse vor der Bereitstellung zu verbessern. Das Aktivieren von Assertions im Produktionseinsatz unterscheidet sich völlig vom Aktivieren von Assertions während der dynamischen Analyse (wie z.B. Tests). In einigen Fällen ist das Aktivieren von Assertions im Produktionseinsatz äußerst unklug (insbesondere bei hochintegren Komponenten). Es gibt viele Argumente gegen das Aktivieren von Assertions in der Produktion, z.B. sollten Bibliotheken keine Aufrufer zum Absturz bringen, ihre Anwesenheit kann zur Ablehnung durch App Stores führen und/oder das Auslösen einer Assertion in der Produktion kann private Daten wie private Schlüssel offenlegen. Beachten Sie, dass in vielen Linux-Distributionen NDEBUG nicht definiert ist, sodass C/C++ assert() standardmäßig für die Produktion in diesen Umgebungen aktiviert wird. Es kann wichtig sein, einen anderen Assertion-Mechanismus zu verwenden oder NDEBUG für die Produktion in diesen Umgebungen zu definieren.

    The software includes run-time assertions that are checked during testing and coverage runs, and are not relied on in production:

    • Explicit invariant assertions: debug_assert! checks guard internal invariants on the hottest and most state-heavy paths, for example call-state encoding and store-drop tracking in the invocation dispatcher (crates/wash-runtime/src/engine/dispatch.rs), and socket state in crates/wash-runtime/src/sockets/. These are compiled into test, coverage and debug builds and removed from release builds.
    • Compiler-inserted checks: the test suites and the cargo-llvm-cov coverage job (https://github.com/wasmCloud/wasmCloud/actions/workflows/coverage.yml) build with the dev profile, which enables integer-overflow checks and debug assertions in wasmCloud and its dependencies, including wasmtime's internal assertions. Array and slice bounds checks and RefCell borrow checks are always on.
    • Assertions surface as errors in production: the workspace denies clippy's unwrap_used, expect_used, panic and indexing_slicing (Cargo.toml), so invariants that can fail on real input are checked explicitly and returned as errors rather than crashing the host.
    • The test suites themselves (crates/wash-runtime/tests/, crates/wash/tests/, and the operator's Go tests) assert on behavior extensively.


Sie können Tools und KI-Systeme nutzen, um Änderungen über eine einfache URL vorzuschlagen, z. B. https://www.bestpractices.dev/de/projects/6363/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Wie das geht, erfahren Sie in unserem Automatisierungsvorschlagssystem. 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 Brooks Townsend und die OpenSSF Best Practices Badge-Mitwirkenden als Urheber.

Projekt-Badge-Eintrag im Besitz von: Brooks Townsend.
Eintrag erstellt: 2022-08-15 21:56:48 UTC, zuletzt aktualisiert: 2026-11-03 20:55:31 UTC. Letztes verlorenes Badge: 2023-11-02 18:23:16 UTC. Letztes erreichtes Badge: 2023-11-02 18:38:53 UTC.