Sprachen: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
Der KI-freundliche C23-Compiler für Sicherheitsforschung — auf LLVM gebaut
Integrierter Linker · DynCode-Pipeline · Integrierte Laufzeiten (string · mimalloc · xorstr · strhash)
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.
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.
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.
- 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
ldoderlink.exe - Release-Stripping — integriertes
--strip/-sentfernt 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) undstrhash(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
#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-stringfü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.binAusführliche Designnotizen, Plattformmatrix, CLI-Referenz und Beispiele: Dokumentationsindex. Vollständig kompilierbare Beispiele: examples.
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 | shDas 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 | iexDer 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 shWindows PowerShell:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.ps1))) -Version v3389.1.2Installation prüfen:
neverc --version
neverc hello.c -o hello -fbuiltin-stringKompiliert 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 listEine 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 Downgradeneverc 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 →.
Voraussetzungen, Build-Befehle, Cross-Kompilierung nach Windows, PATH-Einrichtung und Wechsel zwischen Release-Installation und In-Tree-Build — siehe Lokale Entwicklung.
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 devLLVM-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.