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.686

Fil-C é uma implementação de C e C++ com segurança de memória fanaticamente compatível. Muitos softwares compilam e executam com Fil-C sem nenhuma ou com mínimas alterações. Todos os erros de segurança de memória são capturados como panics do Fil-C. O 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 em relação à capacidade. O Fil-C não possui instrução unsafe e apenas FFI limitada para código inseguro.

O Fil-C é especial porque:

  • O Fil-C alcança segurança total sem escapatórias. 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 de segurança semelhante ao de capacidades de hardware como CHERI, exceto que roda em hardware comum (X86_64 ou ARM64).

  • O Fil-C foi projetado para impedir 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 fundamental 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 por ponteiro são permitidos se atingirem memória válida).

  • Do ponto de vista do usuário da linguagem, o 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 sem nenhuma alteração. O compilador Fil-C é baseado no clang 20.1.8, então suporta C17 e C++20.

Licença

O compilador (clang + LLVM) é coberto pelo LLVM-LICENSE.txt. O runtime é coberto pelo PAS-LICENSE.txt (veja libpas/LICENSE.txt na distribuição do código-fonte). No caso da distribuição clássica do Fil-C baseada em musl, a musl libc é coberta pelo MUSL-LICENSE.txt (veja projects/yolomusl/COPYRIGHT e projects/usermusl/COPYRIGHT na distribuição do código-fonte). No caso da distribuição /opt/fil, a glibc é coberta pelo 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 pelo 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 no github. A distribuição do código-fonte também inclui muitos programas adicionais que foram portados para o 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

O 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 isso me permite fazer um trabalho mais fiel de implementação da libc. Não há nada fundamentalmente impedindo o Fil-C de funcionar em outras arquiteturas ou sistemas operacionais além do Linux.

Primeiros Passos

Se você baixou os 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.686-linux-x86_64.tar.xz ou filc-0.686-linux-aarch64.tar.xz), isso configura o Fil-C para rodar no diretório atual.

  • No caso da distribuição /opt/fil baseada em glibc (optfil-0.686-linux-x86_64.tar.xz), isso configura o 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 o Fil-C a partir deste diretório.

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

  • ./build_all_fast_glibc.sh - compila uma configuração semelhante, mas com glibc 2.40 como libc.

  • ./build_all.sh - build completo baseado em musl (também compila muitos softwares que foram portados para o Fil-C).

  • ./build_all_glibc.sh - build completo baseado em glibc (compila ainda mais softwares que foram portados para o Fil-C).

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

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

Coisas Que Funcionam

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

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

O 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 na stack.

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

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

  • Erros de tipo decorrentes de vinculação.

  • Erros de tipo decorrentes de uso indevido de va_lists.

  • Corridas de ponteiros.

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

  • Muitas outras coisas.

O 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 o 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