Voltar às atualizações
New releaseSep 17, 2026

fil-c v0.685

Fil-C: segurança de memória completamente compatível para C e C++

Compartilhar

Fil-C 0.684

Fil-C é uma implementação de memória segura fanaticamente compatível de C e C++. Muitos softwares compilam e executam com Fil-C com zero ou mínimas alterações. Todos os erros de segurança de memória são capturados como panics do Fil-C. Fil-C alcança isso usando uma combinação de coleta de lixo concorrente e capacidades invisíveis (cada ponteiro na memória tem uma capacidade correspondente, não visível ao espaço de endereçamento C). Toda operação fundamental de C (como vista no LLVM IR) é verificada contra a capacidade. Fil-C não tem instrução unsafe e apenas FFI limitada para código inseguro.

Fil-C é especial porque:

  • Fil-C alcança segurança total sem escotilhas de escape. Não há palavra-chave unsafe no Fil-C que possa ser usada para desativar proteções. A vinculação a código inseguro é severamente restrita.

  • A abordagem baseada em capacidades do Fil-C alcança um nível similar de segurança a capacidades de hardware como CHERI, exceto que roda em hardware comum (X86_64 ou ARM64).

  • Fil-C é projetado para prevenir que bugs de segurança de memória sejam usados para exploração, em vez de apenas sinalizá-los com frequência suficiente para encontrar bugs. Isso torna o Fil-C diferente do AddressSanitizer, HWAsan, ou MTE, que podem todos ser contornados por atacantes. A diferença chave que torna isso possível é que o Fil-C é baseado em capacidades (então cada ponteiro sabe qual faixa de memória pode acessar, e como pode acessá-la) em vez de baseado em tags (onde acessos de ponteiro são permitidos se atingirem memória válida).

  • Do ponto de vista do usuário da linguagem, Fil-C é apenas C e C++ com extensões GCC/clang. É mais provável que não que seu programa ou biblioteca C ou C++ favorito compile no Fil-C com zero alterações. O compilador Fil-C é baseado no clang 20.1.8, então suporta C17 e C++20.

Licença

O compilador (clang + LLVM) é coberto por LLVM-LICENSE.txt. O runtime é coberto por PAS-LICENSE.txt (veja libpas/LICENSE.txt na distribuição de código-fonte). No caso da distribuição clássica Fil-C baseada em musl, a musl libc é coberta por MUSL-LICENSE.txt (veja projects/yolomusl/COPYRIGHT e projects/usermusl/COPYRIGHT na distribuição de código-fonte). No caso da distribuição /opt/fil, glibc é coberta por glibc-LICENSE.txt, e todos os outros programas incluídos são cobertos pelos respectivos arquivos -LICENSE.txt. As bibliotecas C++ (libc++/libc++abi) são cobertas por LLVM-LICENSE.txt.

Você pode obter o código-fonte do compilador, runtime, libc++/libc++abi, libc (musl e glibc), e todos os programas incluídos do github. A distribuição de código-fonte também inclui muitos programas adicionais que foram portados para Fil-C nos diretórios projects/ e pizlix/, e eles têm uma variedade de licenças. A distribuição /opt/fil inclui builds de uma variedade de programas adicionais e suas licenças estão em additional-licenses/ nessa distribuição.

Requisitos

Fil-C só funciona em Linux/X86_64 ou Linux/ARM64.

Versões anteriores funcionavam em Darwin/ARM64 e FreeBSD, mas agora estou focando apenas em Linux porque me permite fazer um trabalho mais fiel de implementar libc. Não há nada fundamentalmente impedindo Fil-C de funcionar em outras arquiteturas ou sistemas operacionais além do Linux.

Começando

Se você baixou binários do Fil-C, execute:

./setup.sh

Isso tem um efeito diferente dependendo de qual distribuição binária você selecionou:

  • No caso da distribuição clássica baseada em musl (filc-0.684-linux-x86_64.tar.xz ou filc-0.684-linux-aarch64.tar.xz), isso configura Fil-C para rodar no diretório atual.

  • No caso da distribuição /opt/fil baseada em glibc (optfil-0.684-linux-x86_64.tar.xz), isso configura Fil-C em /opt/fil.

Se você baixou o código-fonte do Fil-C, execute:

./build_all_fast.sh

Então você poderá usar Fil-C de dentro deste diretório.

A distribuição binária do Fil-C vem com musl como libc. Usar ./build_all_fast.sh na distribuição de código-fonte também constrói Fil-C usando musl. Se você está usando código-fonte, então você também pode:

  • ./build_all_fast_glibc.sh - constrói uma configuração similar mas com glibc 2.40 como a libc.

  • ./build_all.sh - build completo baseado em musl (também constrói muito software que foi portado para Fil-C).

  • ./build_all_glibc.sh - build completo baseado em glibc (constrói ainda mais software que foi portado para Fil-C).

  • cd pizlix && sudo ./build.sh - constrói a distribuição Linux Pizlix.

  • cd optfil && sudo ./build.sh - constrói a distribuição /opt/fil.

Coisas Que Funcionam

Muitos pacotes de software funcionam no Fil-C com zero ou mínimas alterações, incluindo grandes como openssl, CPython, SQLite, e muitos outros. Fil-C é poderoso o suficiente para suportar um userland Linux totalmente seguro em memória.

Fil-C tem suporte completo para C e C++ mais quase todas as extensões que clang 20 suporta. Fil-C tem excelente suporte para atomics e intrínsecos SIMD, por exemplo.

Fil-C captura todas as coisas que tornam a segurança de memória em C difícil, como:

  • Out-of-bounds no heap ou stack.

  • Use-after free (também heap ou stack).

  • Confusão de tipo entre ponteiros e não-ponteiros.

  • Erros de tipo surgindo de vinculação.

  • Erros de tipo surgindo de uso indevido de va_lists.

  • Corridas de ponteiro.

  • Chamadas de sistema. Todos os buffers passados para chamadas de sistema são verificados para limites e tipo.

  • Muitas outras coisas.

Fil-C vem com uma libc POSIX razoavelmente completa e até suporta recursos complicados como threads, tratamento de sinais, mmap/munmap, longjmp/setjmp, e exceções C++.

Saiba Mais

Você pode aprender mais sobre Fil-C visitando o site.

Você também pode me enviar um e-mail: [email protected]

Siga-me no Twitter.

Abra issues no GH.

Categorias