OpenMandriva passa a distribuir kernel compilado com o clang
Em 2014, a comunidade OpenMandriva migrou do gcc para o LLVM/clang. Hoje, quase todos os pacotes do OpenMandriva é compilado com o LLVM/clang (menos a glibc, elfutils e outros pacotes que não são clang friendly). Depois disso outras distribuições como Debian, Android e Fedora passaram a adotá-lo no mesmo estilo (100% do Android é compilado com o LLVM).
O LLVM possui suporte as arquiteturas i686, x86_64, znver1, armv7hnl, aarch64 e riscv64. Exits suporte a toolchain cross compile para todas as arquiteturas mencionadas e o openMandriva fornece um automatic build farm chamado ABF gerando pacotes RPM e imagens ISO baseado no código fonte do projeto ou até mesmo no seu próprio. O ABF também possui uma CLI chamada abf-console-client permitindo trabalhar direto nos pacotes do projetos (você pode até mesmo doar ciclos de CPU).
Nick Desaulniers informou que a comunidade OpenMandriva passou a disponibilizar o kernel Linux compilado com o clang que recebeu o nome de kernel-release-clang e incentiva aos usuários a comparar o kernel atual com essa versão.
Aplicando o Clang Thread Safety Analysis ao kernel Linux
No Clang-Built Linux Workshop realizado Fevereiro deste ano, Lukas Bulwahn apresentou a ideia de aplicar o Clang Thread Safety Analysis ao kernel Linux. Já existem várias soluções (inclusive utilizadas pelo Linux) para realizar tal tarefa como sparse, smatch, coccinelle (mini_lock.cocci rule), lockdep, KCSAN, coverity e até ferramentas não open source para tal propósito. Porém, o CTSA trás características diferentes.
Clang Thread Safety Analysis é uma extensão do Clang escrita em C++ (funciona também para a linguagem C) que foi desenvolvido pelo Google e pela CERT/SEI. Clang Thread Safety Analysis emite avisos de potenciais condições de race (potential race conditions) no código fonte, possui fácil configuração, é rapidamente executado, adequado até mesmo para estudantes;
Porém, não entrega os resultados mais promissores (algo que vem sendo trabalhado para melhorar). Agora é aguardar para ver no futuro.
Galera, estes artigo é somente um aviso rápido. Já divulguei o lançamento do compilador LLVM/Clang quando foi a versão 4.0.1, a versão 5.0, a versão 5.1 e agora que divulgar que está disponível a versão 6.0 do compilador LLVM disponível para download que foi um trabalho árduo de seis meses. Esse lançamento trás vária melhorias que podem ser conferidas nas notas de lançamento.
Existem Muitas ferramentas que podem substituir as do projeto GNU tanto em empresas quanto no uso comum em seu dia a dia. conheça aqui algumas delas.
O dia em que o pinguim adquire asas e cauda de um dragão de ferro.
Anos atrás li uma noticia sobre o Linux ter sido compilado com o Clang. E como minha paixão pela FSF era grande, discordei de tudo o que foi dito (paixão é fogo e nos cega as vezes). Alguns dias (ou semanas) depois, publicaram um benchmark entre algumas versões do GCC, o Clang e o ovo de dragão. Não acompanhei muito e larguei para lá, mas foi bom saber que havia outras opções para compilar o Linux além do GCC, como em tudo há no Linux outras opções: GUIs, editores de texto, navegadores.
Passado algum tempo, tive a curiosidade de pesquisar sobre o Clang e acabei gostando do que descobri a respeito do compilador.
Esse é o tipo de liberdade que gosto; a liberdade de escolher o que vou utilizar e não ficar preso ou limitado à uma única opção (isso sim representa a liberdade. A liberdade se estende muito mais do que as citadas pela GPL). Seria a mesma liberdade que tenho de ir ao mercado e poder escolher se quero presunto de uma marca ou de outra (a lei da concorrência existe para isso, assegurar o nosso direito como consumidor e desta forma, as empresas busquem conquistar seus clientes com a melhoria continua de seus produtos ou serviços).
Como mencionei, eu até era extremo defensor de software livre e de código aberto (ainda sou, mas não da forma que eu era), recebia newsletters da FSF por e-mail, porém, tomei antipatia quando Richard Stallman ficou cantando vitória a respeito da morte de Steve Jobs. Ainda assim, continuei com os ideais de software livre e de código aberto. Certa vez participei de um podcast onde um dos convidados que não vou mencionar o nome (e por favor, não me perguntem o nome, pois não irei responder; citar nome é difamação) era defensor de software livre. Até aí tudo bem, eu também sou; o problema é que o cara não queria participar simplesmente pelo fato do software que iria ser utilizado para gravar não era (totalmente) livre; isso rendeu alguns comentários. Depois começou a ficar difícil interagir com ele, pois tudo para ele era somente software livre sem ouvir o que outros tinham a dizer. Percebi que eles pregam a liberdade mas se tornam escravos de ideologias, se tornam inflexíveis. Gosto de software livre e de código aberto, não deixei de usar as ferramentas do projeto GNU (e talvez não deixa de usar tão cedo), mas da comunidade eu não quero nem saber mais.
Alguns dias atras, um amigo conversou comigo sobre chamar o sistema de GNU/Linux ou simplesmente de GNU, e não somente de Linux. Beleza; o assunto encerrado depois de longo debate entre nós.
Coincidência ou não, um ou dois dias depois um seguidor do meu canal comentou a mesma coisa no meu vídeo "Linux (dando nome a criança):
Particularmente eu prefiro chamá-lo somente de Linux e não de GNU/Linux ou simplesmente GNU (GNU seria horrível). Essa guerra por nome do sistema, ao meu ver, está mais voltada a ego do que meritocracia.
Mesmo que discordem de mim, eu afirmo: O GNU só é um projeto bem sucedido e amplamente difundido graças ao seu uso no Linux (mesmo o GNU sendo mais velho). Duvido que o Gnu seria amplamente conhecido se não fosse o Linux.
Se considerarmos chama-lo de GNU/linux ou somente de GNU, então deveríamos considerar todos os outros projetos que utilizamos no Linux e que não fazem parte do GNU; como é o caso do LibreOffice (que para mim representa a liberdade assim como o GNU), o Firefox (e que também representa muito a liberdade para mim), o VLC, as linguagens Python e Perl por (Perl é aberto querendo ou não) dentro outros exemplos.
Quando se fala de GNU, as pessoas só lembram do stallman; não nos lembramos de pessoas como Brian fox que foi o autor do GNU Bash, do GNU Makeinfo, do GNU Info, do GNU Finger, thereadline e history libraries, além de ter sido o mantenedor do GNU Emacs por um tempo (e tem gente que acha que o Stallman que é o cara). Alias, tem muita gente, coisa de uns 80%, que nem sabia disso e acaba dando créditos ao Stallman.
Brian Fox, autor do GNU Bash
Muitos não se lembram de Mark Adler, que foi um os criadores do Gzip (e que inclusive é um dos responsáveis pela missão espacial para Marte).
Mark Adler, um dos autores do Gzip e um dos responsáveis pela missão de exploração ao planeta Marte.
Muitos não se lembram de pessoas valiosas como essa. Já quando falamos de linux, o caso é o contrario disso; quem já esteve em um evento como a Linuxcon sabe que isso é bem diferente.
Existem muitas ferramentas do GNU que são utilizadas no Linux, e disso todos nós já sabemos. Ferramentas como: GCC, Glibc, Bash, Emacs, Gzip, GNU make, Gnome, GTK, Coreutils e etc. A questão é que é possível substituir tais ferramentas, mesmo que ainda não por completo; e é aí aonde a liberdade entra em cena para mim.
Então, para esclarecer esse assunto, selecionei aqui algumas dentre as muitas ferramentas que são possíveis utilizar no lugar das mencionadas do GNU. Não estou fazendo isso com a intenção de discussão, apena procurando te ajudar a ampliar seu conhecimento e abrir os seus olhos para a gama de software livres e de qualidade que existem.
LLVM (Low Level Virtual Machine) é uma coleção de compiladores modulares e reutilizáveis que foi iniciado como um projeto de pesquisa na universidade de Illinois. Está sob licença open Source UIUC no estilo BSD. que mencionam que pretendem mantê-lo permanentemente aberto.O Clang, compilador que mencionei no inicio deste artigo, que é uma alternativa ao GCC, faz parte do LLVM. A palavra Clang (pronuncia-se cléng) é uma onomatopeia em inglês do som emitido pelo metal.
O Clang possui as características de compilação mais rápida, menor uso de memória e melhores ferramentas de diagnósticos como no modelo apresentado abaixo:
Há muitos recursos e atributos interessantes no LLVM e no Clang para os desenvolvedores e pessoas que integram sistema podem tirar vantagem quando desenvolver ou implantar seus próprios projetos.
Um outro recurso interessante mencionado no site do Funtoo Linux, é a sua capacidade de compilação de programas Leiam o artigo em http://www.funtoo.org/Clang ou leia na imagem abaixo:
Existem muitas empresas trabalhando e investindo recursos nesse projeto. Até mesmo a Microsoft está investido recursos financeiros no LLVM, pois irá basear o seu futuro .Net no LLVM.
Acompanhe a lista de empresas e projetos que utilizam o LLVM
O OpenWall faz referência a biblioteca Musl por oferecer suporte nativo ao pacote TCB. Existe a distribuição Alpine Linux que faz uso dessa biblioteca em conjunto com o Busybox ao invés de um terminal. Para quem não sabe o que é o Busybox, ele é conhecido como o canivete Suíço do Linux embarcado. É um conjunto de comandos dentro de um único executável. É o Busybox que fica dentro o initrd para o kernel utilizar no momento do boot. Foi originalmente desenvolvido por Bruce Perens que já foi presidente do projeto Debian assumindo o lugar de Ian Murdock.
Tukaani, era uma distribuição derivada do Slackware (que merecia ter sido mencionada no meu vídeo sobre o Slackware devido a sua ótima contribuição) e que deu origem a alguns projetos. A distribuição não existe mais, mas as ferramentas que eram parte integrante da distribuição estão em pleno desenvolvimento.
Em suas primeiras versões chamava-se de LZMA, é um compressor que nasceu na distribuição.
O XZ hoje é utilizado fortemente pelo kernel desde de Dezembro de 2.013 e pelo Funtoo desde 2.008 (como mencionei no meu artigo parabenizando a equipe do Funtoo).
O XZ apresenta melhor compressão do que o Gzip mesmo em compressões com o Gzip utilizando a opção "-9". Na verdade o XZ apresenta melhor compressão até mesmo que o Bzip2.
Dentre os casos de sucesso do CMake podemos ver o Netflix, o KDE, o game Second Life, sistemas de robóticas, o MySQL entre outros. Um coisa que considero a equipe do CMake é a sua humildade.
Falando de CMake, eu não poderia deixar de citar o Scons, que também é uma ferramenta de construção. Escrita em Python, o Scons visa ser um substituto para o tradicional make e que possui funcionalidade integrada semelhando ao autoconf/automake.
Muitos já elogiaram o Scons; pessoas como Eric S. Raymond, authr de "A Catedral e o Bazaar", Timothee Besset da id Softwareonde menciona que o Linux build system do Doom3 utiliza o Scons e que é show. Essa já é a segunda vez que ouço que o Scons é utilizado em compilação de alguma coisa relacionada a jogos. Gosto de considerar a parte da avaliação envolvendo jogos devido sua dificuldade de programação que envolve inteligencia artificial, simulação de física, renderização e etc.
Man
Apesar de muito conhecido, incluí o Man nessa história por que o GNU possui o seu próprio, o comando info. Detesto o info; hora ele é útil, a maior parte do tempo não.
Percebi que projetos fora do GNU ou até forks são em certos aspectos mais eficientes em seus propósitos.
Não estou aqui me levantando contra o projeto GNU, mas a mesma mensagem que deixo aos usuários de Windows envio também às comunidades de software livre de código aberto. Não devemos ficar presos unicamente à ideias ou paixão. O mundo é muito mais amplo do que possamos imaginar e podemos usufruir de tudo isso, dando chance a outros projetos também. Adaptar ou morrer é um fato.
Se uma ferramenta surge para o bem da comunidade, vindo a substituir as já existentes, ela devem ser bem recebidas. Isso é algo que acontece constantemente no Linux.
Essas ferramentas vem para a melhoria e o avanço da tecnologia. O que vejo é muita rivalidade inútil ao invés de foco na coisa mais importante, que é a melhoria contínua.
Lembrem-se não somete do GNU, e sim de todos os projetos de software livre e de código aberto que, por muitas vezes, podem apresentar ser até mais eficientes. Lembrem-se de todas as licenças que também proporcionam e possibilitam a liberdade (GPL não é unica. Existem em torno de 800 licenças). Lembrem-se de todas as pessoas que contribuem para esses projetos; graças a elas é que os projetos tem crescido e evoluído. E o mais importante unindo aos três itens mencionados, lembrem-se de serem livres.
Existe até mesmo o projeto da LLVM Linux Foundation que visa compilar totalmente o kernel utilizando o Clang (fronend do LLVM). Algumas distribuições, projetos e empresas já migraram para o compilador como a própria Apple (forte a adotar o LLVM), o Open Mandriva ja compilou 94% dos seus pacotes com Clang, o Android é 100% compilado com o LLVM, o Debian hoje compila grande parte dos seus pacotes usando o LLVM/Clang, é fortemente indicado para embarcados, FreeBSD, PCBSD, Sony, Qualcomm e mais uma lista gigantesca de empresas.
Antes de finalizar o ano, o projeto LLVM/Clang lançou a versão 9.0.1. Essa é uma versão de correção de bugs da versão anterior e mantendo sua compatibilidade. Não há muito o que se falar, mas eu não queria deixar passar batido o seu lançamento (e o seu próximo lançamento está previsto para 6 ou 7 de April de 2020). Fica aqui também um forte agradecimento aos financiadores do projeto que tem permitido esse compilador acontecer.
Pois é, o anuncio foi feito recentemente no próprio projeto e já há uma longa discussão sobre o assunto.
O vídeo da semana que vem já está pronto e trás uma noticia muito interessante, agora o Fedora também passará a adotar o LLVM/Clang ao invés do GCC. Mais uma das principais distribuição Linux que migra para esse poderoso compilador:
Nesse feriado aqui no Brasil de 7 de Setembro foi lançada a nova versão do compilador saltando de 4.0.1 para 5.0 já que na nova versão possui um novo esquema versão (assim como aconteceu no Linux).
Nessa nova versão que foi um esforço de seis meses para o lançamento, foi adicionado suporte a C++17, co-rotinas, melhorias no desempenho, no warinig no compilador, muitas correções de bugs e muito mais.
todas as informações estão nas notas de lançamento que podem ser conferidas logo abaixo:
Puppy quirky passará a utilizar toybox, musl e clang
Puppy Quirky Linux é uma distribuição experimental criada por Barry Kauler em 2013 depois de se aposentar da liderança do projeto Puppy Linux. Sim, o Quirky é desenvolvido pelo fundador do Puppy Linux com a intenção de poder explorar o sistema mais a fundo com novas ideias podendo ser mais ousado nos desafios. Porém em Dezembro de 2018 o Quirky Linux foi descontinuado para dar lugar a sua nova distribuição experimental chamada EasyOS.
No inicio de Outubro, anunciaram que irão iniciar sua próxima build T2 para o Puppy quirky e que planejam utilizar musl/clang e substituir o busybox totalmente pelo toybox. O maior problema no momento é que ainda não é possível utilizar o toybox como principal terminal padrão (nem mesmo no Hermetic Linux, ou mkroot que é a distribuição de teste de implementação do toybox) devido ainda ter certa dependência completa do toybox pendente. No caso do mkroot, o que ainda é feito no mkroot é trabalhar em dois passos.
Utilizar o Busybox como terminal de comandos padrão
Substituir os comandos pelos existentes no toybox.
Por hora é o que pretendem fazer no build T2 do Puppy Quirky até que esse objetivo seja alcançado. Espero que tal dependência venha logo o que não falta muito para isso :)
LLVM é a coleção de compiladores que tende a substituir o GCC no Linux (gostemos ou não) sendo já adota pelo Android (O Android é todo compilado com o LLVM), Debian(de mais 50 mil pacotes, 32.757 foram compilados com o LLVM e somente 1314 apresentaram falha (4 %), o Open Mandriva (quase 100% do Open Mandriva) e o Fedora está tomando o mesmo rumo. Fora as distribuições Linux, outros sistemas operacionais também já o adotam como o MacOS (sendo uma das pioneiras no seu uso), o FreeBSD, o TrueOS e o DragonflyBSD (tendo suporte a ambos compiladores). Em Março foi lançada a versão 8.0.0 e como de costume, a cada seis meses é lançada uma nova versão.
Foi lançada a sua versão 8.0.1 que traz muitas correções de bugs da versão 8.0.0 (porém mantendo a sua compatibilidade com a API e ABI da versão anterior); speculative load hardening; compilação atual na API ORC JIT; remoção do suporte experimental à alvo WebAssembly, uma opção do Clang para inicializar varáveis automáticas; melhorias no suporte á cabeçalho pre-compilado no clang-cl, na flag /Zc:dllexportInlines-; suporte a RISC-V no lld e muitas otimizações e melhorias em diagnósticos.
Artigo rápido anunciando que foi lançada a versão 10.0.0 do LLVM. Esse lançamento é o resultado de seis meses de árduo trabalho que traz suporte a conceitos C++ ao Clang, o Clang não roda mais em um processo separado por padrão ("in-process cc1"), Windows control flow guard (CFG) checks, suporte para mais núcleos de processador e features e, como de costume, muitas correções de bug, otimizações e novos diagnósticos de compilador.
LLVM é a coleção de compiladores que tende a substituir o GCC no Linux (gostemos ou não) sendo já adota pelo Android (O Android é todo compilado com o LLVM), Debian (de mais 50 mil pacotes, 32.757 foram compilados com o LLVM e somente 1314 apresentaram falha (4 %)), o Open Mandriva (quase 100% do Open Mandriva) e o Fedora está tomando o mesmo rumo. Fora as distribuições Linux, outros sistemas operacionais também já o adotam como o MacOS X (sendo uma das pioneiras no seu uso), o FreeBSD, o TrueOS e o DragonflyBSD (tendo suporte a ambos compiladores). Em Março foi lançada a versão 8.0.0 e como de costume, a cada seis meses é lançada uma nova versão.
Foi anunciado no 19 de Setembro o lançamento da versão 9.0.0 do LLVM (um trabalho que levou seis meses depois do ultimo lançamento). Nesse lançamento foi adicionado suporte a asm goto, habilitando para construir a mainline do kernel Linux para x86_64 com o Clang, RISCV agora construído por padrão (não é mais experimental), suporte experimental a C++ para o OpenCL. Correções de bugs, otimizações e melhorias no diagnósticos.
LLVM é o compilador que está ganhando cada vez mais espaço nos projetos, ambientes comerciais e acadêmicos. Esse começo de adoção tem a ver com a Apple depois de presenciar a Free Software Foundation tomou a errada atitude de processar a Cisco por um serviço da Broadcom.
Desta forma, a Apple tomou a iniciativa de congelar o uso das ferramentas do GNU que ela já fazia e passou a investir em outros projetos como criar seu próprio servidor de arquivos, comprar o CUPs e investir no LLVM/Clang para substituir a toolchain do GNU. Depois disso, vários outros projetos começaram a seguir o mesmo caminho (que aparenta ser sem volta, até mesmo o Linux anda fazendo o mesmo)
Depois de muito debate, esta semana a fundação LLVM anunciou que irão adicionar o suporte ao compilador e runtimef18 Fortran. Tal conclusão foi feita na EuroLLVM’19 onde os diretores do LLVM aprovaram tal inclusão ao projeto. A fundação recomendou adotar um novo nome ao projeto como flang ou simplesmente fortran para se tornar mais óbvio para novos contribuidores.
Há outros debates sendo feitos em torno da nova adição. A comunidad LLVM Foundation dá boas vindas ao projeto ficando satisfeitas em ver novos esforços sobre o compilador e runtime.
Eu não poderia deixar de fazer esse anuncio uma vez que o LLVM/Clang vai fazer parte da série Muito além do GNU. então, confiram só que essa em que Tom Stellard anuncia que a nova versão traz correções de bugs presentes na versão 4.0.0 (inclusive esse lançamento é compatível com a versão anterior). Tudo bem... é só isso...
A versão anterior (na qual a 4.0.1 possui compatibilidade) inclui o uso de profile data em ThinLTO, eliminação de código morto (aggressive dead code elimination) mais agressivo more aggressive, suporte experimental a co-rotinas, alvo AVR experimental, melhor compatibilidade com o GNU ld e melhorias de desempenho significativas em LLD, tão bem quanto melhorias em otimoizações e muito mais.
A equipe do LLVM agradece a equipe de testers (Hans Wennborg, Bernhard Rosenkränzer, Dimitry Andric, Simon Dardis, Sylvestre Ledru, Diana Picus, Vedant Kumar) que sem seles não seria possível o seu lançamento. Agradecem tambem a todos que ajudaram a identificar bugs criticos, encontrar bug-fixes e resolver conflitos.
Na Embedded Linux Conference que aconteceu do dia 21 a 23 de Fevereiro deste ano em Portland, Michael Opdenacker da Free Electrons apresentou a palestra sobre como reduzir o tamanho do sistema (tando o kernel quando o user space) já que Linux estava cedendo espaço na IoT para os RTOSes.
Nessa, Michael apresentou utilizando ferramentos como o LLVM/Clang 3.8.1 no lugar do GCC (mesmo que o GCC 6.2 tenha apresentado melhoria diante o GCC 4.7 no ARM). Com o GCC podemos utilizar a opção -Os para reduzir o espaço enquanto que o LLVM/Clang faz isso “out of the box sem precisar fazer nada”. O LLVM/Clang compila o kernel também para a otimização de desempenho tornando-se melhor do que o que temos hoje com o GCC LTO hoje.
Chegaram a sugerir patches de melhoras para o GCC, mas os patches causaram novos problemas e os desenvolvedores temeram que isso criaria novos bugs dificeis de serem rastreados e por isso os patches não foram aceitos.
Outras tecnicas foram aparesentadas para utilizar com o GCC como a opção -mthumb (que no compilador do Ubuntu vem por padrão) para fazer uma mescla de instruções de 16 e 32 bits aos invés de somente 32 em procedores ARM, a opção “make tinyconfig” que é utilizada desde o kernel 3.18, para combinar junto ao “make allnoconfig” com mais algumas configurações e assim reduzir o tamanho dos binários
“ela utiliza gcc optimize for size, assim o código pode ser mais lento mas se torna menor”
“Você habilita a compressão XZIP do kernel, e você economiza entre 6 a 10KB.”
Habilitar a opação obj-y no kernel Makefiles podendo compilar o kernel sem a necessidade do ptrace o tempo todo, que em ARM consome 14KB.
no lado do user space, foram sugeridas ferramentas como o próprio toybox:
“Toybox possui as mesmas aplicações e a maioria dos mesmos recursos que o busybox, mas utiliza somente 84KB ao invés de 100KB,”
“Se você quiser um shell com apenas algunas algumas utilidades na linha de comando, toybox poderia lhe economizar milhares de bytes, embora ele seja menos configurável."
O uso da Musl que utiliza menos espaço do que glibc (sem duvida) ou que a uclibc foi outra opção sugerida por Michael. apresentando um teste de comparação entre bibliotecas compilando um programa hellho.c com o GCC 6.2, o resultado final com a musl foi de 7.3kb, 67KB com a uclibc-ng 1.0.22 e 49KB com a glibc.
Para reduzir o filesystem, Michael sugeriu o uso do initramfs que lhe permite realizar boot mais rápido uma vez que não inicializa um filesystem e drivers armazenados. Para sistemas com mais RAM, Michael sugere o uso de filesystems mais compactos com o squashfs, JFFS2 ou ZRAM. Michael conclui que ainda há melhorias significativas a serem feitas no kernel space e no userspace. Daí eu imagino:
Se Linux já é bom, imagina tendo essas melhorias. Espero ainda ver isso =)
Como sempre, Linux está sempre muito a frente quando o assunto é inovação na parte de segurança. Em um vídeo sobre o Android eu dividi segurança em partes diferentes para mostrar como realmente funciona e a fim de desmistificar o assunto.
Desta vez o kernel Linux receberá recurso de Integridade no fluxo de controle (CFI = Control-flow integrity). A ideia foi apresentada por Kees Cook na linux.conf.au deste ano em Gold Coast, Australia. Control-flow Intigrity é uma técnica utilizada para reduzir a habilidade de redirecionar a execução de um programa evitando que ataques escalem privilégio de administrador.
O Clang já possui alguns recursos que podem dar assistência e manter control-flow integrity e que tem sido aplicado ao kernel Android.
A ideia surgiu analisando de ataques históricos relacionados a antivirus. O user space pode escrever (gravar) e executar em qualquer lugar no address space mas não pode escrever na área reservada ao kernel space. Uma falha de escrita no kernel poderia permitir que algo no user space seja gravado no kernel memory. Daí surge a ideia do CFI assegurar que tentativas indiretas vão para seus respectivos endereços.
Tom Stellard anunciou hoje o lançamento do LLVM 11.0.1. Essa versão traz correções de bugs da versão anterior mas mantendo a compatibilidade entre as duas versões.