Skip to content

Latest commit

 

History

History
227 lines (158 loc) · 12.5 KB

project.md

File metadata and controls

227 lines (158 loc) · 12.5 KB

Sprachen: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية

NeverC

NeverC

Der KI-freundliche C23-Compiler für Sicherheitsforschung — auf LLVM gebaut

Integrierter Linker · DynCode-Pipeline · Integrierte Laufzeiten (string · mimalloc · xorstr · strhash)

AGPL-3.0 C23 Platform Arch

Dokumentationsindex · DynCode-Leitfaden · Integrierte Laufzeiten · Plugin-API · Roadmap


Hinweis: GitHub zeigt auf der Repository-Startseite immer README.md (Englisch) – keine automatische Spracherkennung. Nutzen Sie die Sprachlinks oben; in der Dokumentation und dem DynCode-Leitfaden dieselbe Sprache über Sprachleiste und Breadcrumbs beibehalten.

Überblick

NeverC kompiliert Standard-C in gehostete Binärdateien, Freestanding-Executables und positionsunabhängigen DynCode — alles aus einer Toolchain. Zielarchitekturen: x86_64 und AArch64 (nur Little-Endian). Zukünftige Versionen werden EVM (Ethereum Smart Contracts) und Solana eBPF (On-Chain-Programme) als Kompilierungsziele hinzufügen.

Warum NeverC?

C ist bereits die einfachste Systemsprache. NeverC macht sie noch einfacher:

  • Reines C23, mehr nicht — Keine Templates, kein RAII, kein Operator-Overloading, kein versteckter Kontrollfluss. Was Sie lesen, wird ausgeführt.
  • Eingebauter string — Werttyp-String mit +, ==, .starts_with() und automatischer Freigabe — ohne C++.
  • Keine Exceptions — Fehlerbehandlung bleibt explizit. Kein Stack-Unwinding, keine Performance-Überraschungen.
  • Einzelne Binärdatei — Compiler + Linker + Laufzeiten in einer einzigen ausführbaren Datei. Null externe Abhängigkeiten.
  • LLM-freundlich — Minimale Grammatik und deterministische Semantik sorgen dafür, dass KI-generierter NeverC-Code häufiger korrekt kompiliert als C++-Alternativen.
  • Echte Cross-Kompilierung — Windows PE, Linux ELF, macOS Mach-O, Android ELF und DynCode von macOS oder Linux bauen — keine VM, kein Dual-Boot, keine SDK-Suche. Plattform-SDKs sind im Compiler integriert.
  • Erweiterbar ohne Reibung — Ein einziger C-Header, 130 benannte Compilerphasen, und Sie haben ein Compiler-Plugin, das in jede Phase eingreifen kann — von der IR-Optimierung bis zur finalen Binärausgabe — ohne LLVM-Kenntnisse.
  • Sicherheitsforschung eingebaut — DynCode-Kompilierung, Kompilierzeit-Stringverschlüsselung und plattformübergreifende PE-Generierung sind nativ in den Compiler integriert — keine nachträglich angehängten externen Skripte.

Funktionen

  • DynCode-Compiler — mehrstufige IR/MIR-Pipeline, plattformübergreifende Extraktion, Import-/Syscall-Lowering, Kernelmodus, Bad-Byte-Audit, Plugin-Architektur
  • Integrierter Linker — COFF, ELF und Mach-O in einem Binary; kein externes ld oder link.exe
  • Release-Stripping — integriertes --strip / -s entfernt nicht zur Laufzeit nötige Symbole und Quelldebuginformationen aus finalen ELF-, Mach-O- und PE/COFF-Images und benennt .ko-Symbole kernelgerecht strukturell um (kein hash und keine encryption)
  • Cross-Kompilierung — Windows PE, Linux ELF, macOS Mach-O und Android ELF von jedem Host mit integrierten Plattform-SDKs
  • Integrierte Laufzeiten — in den Compiler eingebettete LLVM-Bitcode-Laufzeiten: string (Werttyp-String, automatische Speicherverwaltung), mimalloc (transparenter Hochleistungs-Allokator-Override, außerhalb von Kernel- und Freestanding-Zielen standardmäßig aktiv), xorstr (instanzbezogene Kompilierzeitverschlüsselung, verpflichtende späte Versiegelung und native Expansion pro Aufrufstelle) und strhash (Kompilierzeit-Zeichenketten-Hashing mit übereinstimmender Laufzeit)
  • Plugin-API — Reine C-ABI für Out-of-Tree-Plugins; Single-Header-SDK, null LLVM/CRT-Abhängigkeiten, über Treiber-, Präprozessor-, AST-, IR-, MIR-, MC-, Objekt-, Link-, LTO- und dyncode-Phasen hinweg
  • .nc-Erweiterung — .nc-Dateierweiterung aktiviert automatisch alle NeverC-Funktionen (string, Integer-Typen im Rust-Stil) ohne zusätzliche Flags
  • Schlanker LLVM-Build — nur x86_64 / AArch64-Backends; C++/ObjC/OpenMP-Pfade entfernt

Schnellbeispiel

#include <stdio.h>

typedef struct { string user; string pass; } creds;

int main(void) {
    string msg = "Hello " + "NeverC!";
    printf("%s\n", msg.c_str());

    // Compile-time encryption — `strings ./bin` cannot find these literals
    creds login = {.user = "admin".encrypt(), .pass = "s3cret".encrypt()};
    string paths[] = {"/api/v1".encrypt(), "/api/v2".encrypt()};

    // Zero-allocation decrypt-and-compare (plaintext never fully in memory)
    if (login.user == "admin".encrypt() && login.pass == "s3cret".encrypt()) {
        for (int i = 0; i < 2; i++)
            if (msg.starts_with(paths[i]))
                printf("route matched: %s\n", paths[i].c_str());
    }
    return 0;
}

Hinweis: Der eingebaute string-Typ erfordert -fbuiltin-string für .c-Dateien. Er wird automatisch für .nc-Dateien und im -fdyncode-Modus aktiviert.

# macOS arm64 / x86_64
neverc -fdyncode -target arm64-apple-macos hello.c -o hello.bin
neverc -fdyncode -target x86_64-apple-macos hello.c -o hello.bin

# iOS arm64
neverc -fdyncode -target arm64-apple-ios hello.c -o hello.bin

# Linux x86_64 / arm64
neverc -fdyncode -target x86_64-linux-gnu hello.c -o hello.bin
neverc -fdyncode -target aarch64-linux-gnu hello.c -o hello.bin

# Android arm64 / x86_64
neverc -fdyncode -target aarch64-linux-android hello.c -o hello.bin
neverc -fdyncode -target x86_64-linux-android hello.c -o hello.bin

# Windows x86_64 / arm64
neverc -fdyncode -target x86_64-pc-windows-msvc hello.c -o hello.bin
neverc -fdyncode -target aarch64-pc-windows-msvc hello.c -o hello.bin

Ausführliche Designnotizen, Plattformmatrix, CLI-Referenz und Beispiele: Dokumentationsindex. Vollständig kompilierbare Beispiele: examples.

Installation

Unter Linux x64/arm64 und macOS arm64 installieren Sie die neueste Release mit einem Befehl:

curl -fsSL https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.sh | sh

Das Skript lädt das Release-Archiv für Ihre Plattform herunter, prüft es gegen SHA256SUMS, installiert nach ~/.neverc und hängt ~/.neverc/bin an den Shell-PATH an.

Unter Windows x64/arm64 führen Sie diesen Befehl in PowerShell 5.1 oder neuer aus:

irm https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.ps1 | iex

Der Windows-Installer erkennt die native Architektur, prüft das Release-Archiv gegen SHA256SUMS und installiert ohne Administratorrechte nach $HOME\.neverc. Er ergänzt $HOME\.neverc\bin im PATH der aktuellen Sitzung und des Benutzers. Damit ist neverc sofort und in neuen Terminals verfügbar.

Eine bestimmte Version pinnen:

curl -fsSL https://raw.githubusercontent.com/NeverSight/NeverC/v3389.1.2/install.sh | NEVERC_VERSION=v3389.1.2 sh

Windows PowerShell:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.ps1))) -Version v3389.1.2

Installation prüfen:

neverc --version
neverc hello.c -o hello -fbuiltin-string

neverc run

Kompiliert in eine temporäre ausführbare Datei, führt sie auf dem lokalen Host aus und löscht sie danach — ähnlich wie go run. Zum Behalten des Binaries verwende neverc ... -o out.

neverc run -O2 -fbuiltin-string hello.c
neverc run -O2 main.c helper.nc -- --verbose two words
neverc run hello.c -O1 -- program-arg
Thema Verhalten
Standardtrennung Compiler-Flags vor der ersten .c/.nc-Datei; aufeinanderfolgende Quellen werden gemeinsam kompiliert; der Rest geht an main
Explizites -- Vor -- an den Compiler, danach an das Programm (wenn nach den Quellen Linker-Flags o. Ä. folgen)
Arbeitsverzeichnis Läuft im aktuellen Verzeichnis — relative Pfade wie bei einem normalen Binary
Umgebung & I/O Erbt die Umgebung; stdin/stdout/stderr sind mit dem temporären Prozess verbunden
Exit-Status Gibt den Programm-Exit-Code zurück; bei Compilerfehler den Compiler-Exit-Code, ohne das Programm zu starten
Artefakt Liegt in neverc-run-* und wird danach entfernt

Cross-Compile-Flags können kompilieren, aber das temporäre Binary wird immer auf dem Host ausgeführt. Regeln, Beispiele und Grenzen: neverc run →.

Das macOS-arm64-Binary ist mit Apple Developer ID signiert und notarisiert.

Optionale Umgebungsvariablen:

Variable Zweck
NEVERC_INSTALL_DIR Installationspräfix (Standard: ~/.neverc)
NEVERC_VERSION Release-Tag, z. B. v3389.1.2 (Standard: latest)
NEVERC_NO_MODIFY_PATH=1 Shell-Profil nicht ändern; unter Windows weder den Sitzungs- noch den Benutzer-PATH ändern

Cross-Compilation-Sysroots (Windows SDK, Linux-Sysroot usw.) werden bei Bedarf installiert, sobald der Compiler im PATH liegt:

neverc runtime install all
neverc runtime install windows-x64
neverc runtime list

Eine Release-Installation kann Compiler und bereits installierte Cross-Compilation-Runtimes als eine gemeinsame Versionseinheit aktualisieren:

neverc update                 # neuestes vollständiges Release
neverc update v3389.1.2       # exakte Version, auch zum Downgrade

neverc upgrade ist ein Alias. NeverC löst genau einen konkreten Release-Tag auf und installiert nur die bereits vorhandenen Runtimes neu; alle werden auf die Zielversion des Compilers festgelegt. Vor Änderungen an aktiven Dateien werden sämtliche benötigten Archive heruntergeladen, per SHA256 geprüft, entpackt und inhaltlich validiert. Fehler beim Vorbereiten oder Prüfen lassen die aktuelle Installation unverändert, bei Commit-Fehlern erfolgt ein automatisches Rollback. Ist ein Runtime- Release fehlerhaft, setzt neverc update <ältere Version> Compiler und installierte Runtimes gemeinsam zurück.

Vollständige Befehlsreferenz: neverc runtime → · neverc update → · neverc build / make →.

Aus den Quellen bauen

Voraussetzungen, Build-Befehle, Cross-Kompilierung nach Windows, PATH-Einrichtung und Wechsel zwischen Release-Installation und In-Tree-Build — siehe Lokale Entwicklung.

Mitwirken

NeverC ist bewusst nur C (C23). C++, Objective-C, CUDA und ähnliche Sprach-Frontends liegen außerhalb des Projektumfangs; entsprechende Pull Requests werden geschlossen.

Große Änderungen an Sprache, ABI oder Runtime bitte zuerst als Issue diskutieren, bevor ein Pull Request kommt.

Der Standard-Entwicklungsbranch ist dev. Vor dem Start klonen und dev auschecken; Pull Requests bitte gegen dev öffnen.

git clone https://github.com/NeverSight/NeverC.git
cd NeverC
git checkout dev

Lizenz

AGPL-3.0

LLVM-Komponenten behalten die Apache-2.0 WITH LLVM-exception-Lizenz.

Beim Kopieren oder Anpassen von Code, auch bei KI-/LLM-gestützter oder LLVM-bezogener Wiederverwendung, sind die geltende Lizenz einzuhalten und die vorgeschriebenen Urheberrechts-, Lizenz- und Urhebervermerke beizubehalten. Unabhängig davon bitten wir alle, die NeverC als Referenz nutzen, das Projekt und die Originalquelle anzugeben; diese Bitte ist keine zusätzliche Lizenzbedingung.

Siehe die Hinweise, den Leitfaden zur Quellenangabe und die maschinenlesbaren Zitierangaben.