{"id":21774,"date":"2025-02-06T17:46:11","date_gmt":"2025-02-06T20:46:11","guid":{"rendered":"https:\/\/www.ethicalhacker.com.br\/site\/?p=21774"},"modified":"2025-02-17T12:10:56","modified_gmt":"2025-02-17T15:10:56","slug":"linguagem-rust-ou-c-no-linux","status":"publish","type":"post","link":"https:\/\/www.ethicalhacker.com.br\/site\/2025\/02\/basico\/linguagem-rust-ou-c-no-linux\/","title":{"rendered":"Linguagem C ou Rust no Linux"},"content":{"rendered":"\n<p><strong>A Complexidade e os desafios da ado\u00e7\u00e3o de Rust no Kernel<\/strong><\/p>\n<p style=\"text-align: justify;\">A discuss\u00e3o sobre a ado\u00e7\u00e3o de Rust no desenvolvimento do kernel do Linux tem ganhado destaque nos \u00faltimos anos. Enquanto Rust \u00e9 elogiado por sua seguran\u00e7a de mem\u00f3ria e modernidade, C continua sendo a linguagem dominante no kernel, com d\u00e9cadas de hist\u00f3ria e uma base de c\u00f3digo colossal. Recentemente, um dos mantenedores do kernel, Christoph Hellwig, bloqueou a inclus\u00e3o de c\u00f3digo Rust em uma parte cr\u00edtica do kernel relacionada ao\u00a0<strong>Direct Memory Access (DMA)<\/strong>, reacendendo o debate sobre a viabilidade e a complexidade de integrar Rust no ecossistema do Linux.<\/p>\n<p style=\"text-align: justify;\">Neste artigo, vamos explorar as diferen\u00e7as entre C e Rust, a complexidade de cada linguagem no contexto do desenvolvimento de drivers e sistemas operacionais, e como essa disputa pode moldar o futuro do kernel Linux. Al\u00e9m disso, vamos apresentar exemplos pr\u00e1ticos de scripts em C e Rust para ilustrar as diferen\u00e7as entre as duas linguagens.<\/p>\n<p>\u00a0<\/p>\n<p><strong>O Conflito gerado sobre\u00a0 C\u00a0 ou Rust no Kernel Linux<\/strong><\/p>\n<p style=\"text-align: justify;\">Christoph Hellwig, mantenedor do c\u00f3digo de mapeamento DMA no kernel Linux, rejeitou a inclus\u00e3o de altera\u00e7\u00f5es que permitiriam o uso de DMA em drivers escritos em Rust. Ele argumentou que o c\u00f3digo Rust deveria ser integrado diretamente nos drivers, em vez de ser adicionado ao n\u00facleo do kernel. Essa decis\u00e3o gerou controv\u00e9rsia, pois o DMA \u00e9 uma tecnologia essencial para o desempenho de hardware, e a rejei\u00e7\u00e3o do c\u00f3digo Rust pode limitar a ado\u00e7\u00e3o da linguagem em \u00e1reas cr\u00edticas do kernel.<\/p>\n<p style=\"text-align: justify;\">Hellwig tamb\u00e9m expressou sua relut\u00e2ncia em lidar com c\u00f3digo escrito em m\u00faltiplas linguagens, comparando Rust at\u00e9 mesmo com assembly. Ele rejeitou a ideia de manter o c\u00f3digo Rust separadamente, o que poderia dificultar a manuten\u00e7\u00e3o e a coes\u00e3o do kernel.<\/p>\n<p>\u00a0<\/p>\n<p><strong>A Complexidade do Kernel Linux<\/strong><\/p>\n<p style=\"text-align: justify;\">O kernel Linux n\u00e3o \u00e9 um projeto monol\u00edtico, mas sim uma cole\u00e7\u00e3o de subsistemas, cada um com seu pr\u00f3prio mantenedor e regras. Esses &#8220;principados&#8221; operam com ampla autonomia, mas precisam colaborar para garantir a integra\u00e7\u00e3o e a funcionalidade do sistema como um todo. Disputas como a atual s\u00e3o comuns, e a resolu\u00e7\u00e3o geralmente envolve negocia\u00e7\u00f5es ou a interven\u00e7\u00e3o de Linus Torvalds, o criador do Linux.<\/p>\n<p>\u00a0<\/p>\n<p><strong>Complexidade e benef\u00edcios<\/strong><\/p>\n<p><strong>C: A linguagem tradicional do kernel<\/strong><\/p>\n<p>C \u00e9 a linguagem predominante no desenvolvimento do kernel Linux. Suas principais caracter\u00edsticas incluem:<\/p>\n<ul>\n<li>\n<p><strong>Controle de baixo n\u00edvel<\/strong>: C permite manipula\u00e7\u00e3o direta de mem\u00f3ria e hardware, essencial para um kernel.<\/p>\n<\/li>\n<li>\n<p><strong>Simplicidade e portabilidade<\/strong>: A sintaxe de C \u00e9 relativamente simples, e o c\u00f3digo \u00e9 altamente port\u00e1vel.<\/p>\n<\/li>\n<li>\n<p><strong>Legado<\/strong>: O kernel Linux possui milh\u00f5es de linhas de c\u00f3digo em C, e a migra\u00e7\u00e3o para outra linguagem \u00e9 um desafio monumental.<\/p>\n<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">No entanto, C carece de mecanismos modernos de seguran\u00e7a, como prote\u00e7\u00e3o contra estouro de buffer e uso ap\u00f3s libera\u00e7\u00e3o (use-after-free), que s\u00e3o fontes comuns de vulnerabilidades.<\/p>\n<p>\u00a0<\/p>\n<p><strong>Rust: A nova esperan\u00e7a<\/strong><\/p>\n<p style=\"text-align: justify;\">Rust \u00e9 uma linguagem moderna que combina desempenho com seguran\u00e7a de mem\u00f3ria. Suas vantagens incluem:<\/p>\n<ul>\n<li>\n<p style=\"text-align: justify;\"><strong>Seguran\u00e7a de mem\u00f3ria<\/strong>: Rust evita erros comuns, como estouro de buffer e use-after-free, em tempo de compila\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p style=\"text-align: justify;\"><strong>Concorr\u00eancia segura<\/strong>: Rust oferece ferramentas poderosas para programa\u00e7\u00e3o concorrente sem data races.<\/p>\n<\/li>\n<li>\n<p style=\"text-align: justify;\"><strong>Interoperabilidade com C<\/strong>: Rust pode ser integrado a projetos existentes em C, facilitando a ado\u00e7\u00e3o gradual.<\/p>\n<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">No entanto, Rust \u00e9 mais complexo que C, especialmente para desenvolvedores acostumados com a simplicidade e a liberdade de C. Al\u00e9m disso, a integra\u00e7\u00e3o de Rust no kernel requer mudan\u00e7as significativas na infraestrutura de compila\u00e7\u00e3o e teste.<\/p>\n<h2>\u00a0<\/h2>\n<p><strong>Exemplos pr\u00e1ticos entre a linguagem\u00a0 C e Rust<\/strong><\/p>\n<p><strong>Exemplo 1: Manipula\u00e7\u00e3o de mem\u00f3ria<\/strong><\/p>\n<p>Em C, a manipula\u00e7\u00e3o de mem\u00f3ria \u00e9 manual, o que pode levar a erros:<\/p>\n<pre><strong><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdio.h&gt;<\/span><\/span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdlib.h&gt;<\/span><\/span>\n\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token keyword\">int<\/span> <span class=\"token operator\">*<\/span>ptr <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token function\">malloc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>ptr <span class=\"token operator\">==<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n        <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Falha ao alocar mem\u00f3ria\\n\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n        <span class=\"token keyword\">return<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token punctuation\">}<\/span>\n    <span class=\"token operator\">*<\/span>ptr <span class=\"token operator\">=<\/span> <span class=\"token number\">42<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Valor: %d\\n\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">*<\/span>ptr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>ptr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\n<\/strong><span class=\"token punctuation\"><strong>}<br \/><br \/><\/strong><br \/>Em Rust, a seguran\u00e7a de mem\u00f3ria \u00e9 garantida em tempo de compila\u00e7\u00e3o:<br \/><strong><br \/><\/strong><\/span><\/pre>\n<pre><strong><span class=\"token keyword\">fn<\/span> <span class=\"token function-definition function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token keyword\">let<\/span> ptr <span class=\"token operator\">=<\/span> <span class=\"token class-name\">Box<\/span><span class=\"token punctuation\">::<\/span><span class=\"token function\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">42<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token macro property\">println!<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Valor: {}\"<\/span><span class=\"token punctuation\">,<\/span> ptr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/strong><\/pre>\n<p style=\"text-align: justify;\"><span class=\"token punctuation\"><br \/>Rust usa o conceito de\u00a0<strong>ownership<\/strong> para gerenciar mem\u00f3ria. Quando <code>ptr<\/code>\u00a0sai do escopo, a mem\u00f3ria \u00e9 automaticamente liberada, sem risco de vazamentos.<br \/><br \/><br \/><\/span><\/p>\n<p><strong>Exemplo 2: Concorr\u00eancia<\/strong><\/p>\n<p>Em C, a concorr\u00eancia \u00e9 complexa e propensa a erros:<\/p>\n<pre><strong><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span><\/span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdio.h&gt;<\/span><\/span>\n\n<span class=\"token keyword\">int<\/span> counter <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">void<\/span> <span class=\"token operator\">*<\/span><span class=\"token function\">increment<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span> <span class=\"token operator\">*<\/span>arg<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">100000<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n        counter<span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token punctuation\">}<\/span>\n    <span class=\"token keyword\">return<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token class-name\">pthread_t<\/span> t1<span class=\"token punctuation\">,<\/span> t2<span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">pthread_create<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>t1<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">,<\/span> increment<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">pthread_create<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>t2<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">,<\/span> increment<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">pthread_join<\/span><span class=\"token punctuation\">(<\/span>t1<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">pthread_join<\/span><span class=\"token punctuation\">(<\/span>t2<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Contador: %d\\n\"<\/span><span class=\"token punctuation\">,<\/span> counter<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/strong><\/pre>\n<p style=\"text-align: justify;\"><span class=\"token punctuation\"><br \/>Este c\u00f3digo tem um\u00a0<strong>data race<\/strong>, pois\u00a0<code>counter<\/code>\u00a0\u00e9 acessado simultaneamente por duas threads sem sincroniza\u00e7\u00e3o.<br \/><br \/><br \/>Em Rust, data races s\u00e3o prevenidos em tempo de compila\u00e7\u00e3o:<br \/><\/span><\/p>\n<pre><strong><span class=\"token keyword\">use<\/span> <span class=\"token namespace\">std<span class=\"token punctuation\">::<\/span>sync<span class=\"token punctuation\">::<\/span><\/span><span class=\"token punctuation\">{<\/span><span class=\"token class-name\">Arc<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Mutex<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">use<\/span> <span class=\"token namespace\">std<span class=\"token punctuation\">::<\/span><\/span>thread<span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">fn<\/span> <span class=\"token function-definition function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token keyword\">let<\/span> counter <span class=\"token operator\">=<\/span> <span class=\"token class-name\">Arc<\/span><span class=\"token punctuation\">::<\/span><span class=\"token function\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Mutex<\/span><span class=\"token punctuation\">::<\/span><span class=\"token function\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">let<\/span> <span class=\"token keyword\">mut<\/span> handles <span class=\"token operator\">=<\/span> <span class=\"token macro property\">vec!<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\n\n    <span class=\"token keyword\">for<\/span> _ <span class=\"token keyword\">in<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">2<\/span> <span class=\"token punctuation\">{<\/span>\n        <span class=\"token keyword\">let<\/span> counter <span class=\"token operator\">=<\/span> <span class=\"token class-name\">Arc<\/span><span class=\"token punctuation\">::<\/span><span class=\"token function\">clone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>counter<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n        <span class=\"token keyword\">let<\/span> handle <span class=\"token operator\">=<\/span> <span class=\"token namespace\">thread<span class=\"token punctuation\">::<\/span><\/span><span class=\"token function\">spawn<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">move<\/span> <span class=\"token closure-params\"><span class=\"token closure-punctuation punctuation\">|<\/span><span class=\"token closure-punctuation punctuation\">|<\/span><\/span> <span class=\"token punctuation\">{<\/span>\n            <span class=\"token keyword\">for<\/span> _ <span class=\"token keyword\">in<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">100000<\/span> <span class=\"token punctuation\">{<\/span>\n                <span class=\"token keyword\">let<\/span> <span class=\"token keyword\">mut<\/span> num <span class=\"token operator\">=<\/span> counter<span class=\"token punctuation\">.<\/span><span class=\"token function\">lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">unwrap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n                <span class=\"token operator\">*<\/span>num <span class=\"token operator\">+=<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n        handles<span class=\"token punctuation\">.<\/span><span class=\"token function\">push<\/span><span class=\"token punctuation\">(<\/span>handle<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token punctuation\">}<\/span>\n\n    <span class=\"token keyword\">for<\/span> handle <span class=\"token keyword\">in<\/span> handles <span class=\"token punctuation\">{<\/span>\n        handle<span class=\"token punctuation\">.<\/span><span class=\"token function\">join<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">unwrap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token punctuation\">}<\/span>\n\n    <span class=\"token macro property\">println!<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Contador: {}\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">*<\/span>counter<span class=\"token punctuation\">.<\/span><span class=\"token function\">lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">unwrap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/strong><\/pre>\n<p><span class=\"token punctuation\"><br \/><\/span>Rust usa\u00a0<code>Mutex<\/code>\u00a0e\u00a0<code>Arc<\/code>\u00a0para garantir acesso seguro \u00e0 mem\u00f3ria compartilhada.<\/p>\n<p>\u00a0<\/p>\n<p><strong>O Futuro do Rust no Kernel Linux<\/strong><\/p>\n<p style=\"text-align: justify;\">Apesar dos desafios, o apoio de desenvolvedores influentes, incluindo Linus Torvalds, sugere que a ado\u00e7\u00e3o de Rust no kernel \u00e9 uma quest\u00e3o de tempo. A recente submiss\u00e3o do driver\u00a0Nova, escrito em Rust, \u00e9 um passo significativo nessa dire\u00e7\u00e3o. No entanto, a integra\u00e7\u00e3o completa exigir\u00e1 mudan\u00e7as culturais e t\u00e9cnicas, al\u00e9m de um esfor\u00e7o colaborativo para garantir que Rust e C coexistam harmoniosamente.<\/p>\n<p>\u00a0<\/p>\n<p><strong>Conclus\u00e3o<\/strong><\/p>\n<p style=\"text-align: justify;\">A disputa entre Rust e C no kernel Linux reflete a tens\u00e3o entre inova\u00e7\u00e3o e tradi\u00e7\u00e3o. Enquanto C oferece simplicidade e controle, Rust traz seguran\u00e7a e modernidade. A ado\u00e7\u00e3o de Rust no kernel n\u00e3o ser\u00e1 f\u00e1cil, mas seu potencial para reduzir vulnerabilidades e melhorar a manuten\u00e7\u00e3o do c\u00f3digo \u00e9 ineg\u00e1vel. Como em muitos debates no mundo do software livre, a solu\u00e7\u00e3o provavelmente surgir\u00e1 de um equil\u00edbrio entre os dois mundos.<\/p>\n<p>\u00a0<\/p>\n<p>Fonte e imagens:\u00a0<a href=\"https:\/\/www.heise.de\/en\/news\/Is-a-kernel-developer-blocking-the-success-of-Rust-for-Linux-Yes-and-no-10269318.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.heise.de\/en\/news\/Is-a-kernel-developer-blocking-the-success-of-Rust-for-Linux-Yes-and-no-10269318.html<\/a><\/p>\n<p>\u00a0<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>A Complexidade e os desafios da ado\u00e7\u00e3o de Rust no Kernel A discuss\u00e3o sobre a ado\u00e7\u00e3o de Rust no desenvolvimento do kernel do Linux tem ganhado destaque nos \u00faltimos anos. Enquanto Rust \u00e9 elogiado por sua seguran\u00e7a de mem\u00f3ria e modernidade, C continua sendo a linguagem dominante no kernel, com d\u00e9cadas de hist\u00f3ria e uma [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":21787,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[89,100,105],"tags":[],"class_list":["post-21774","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basico","category-diversos","category-noticias"],"_links":{"self":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/21774","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/comments?post=21774"}],"version-history":[{"count":16,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/21774\/revisions"}],"predecessor-version":[{"id":21792,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/21774\/revisions\/21792"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media\/21787"}],"wp:attachment":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media?parent=21774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/categories?post=21774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/tags?post=21774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}