1<!DOCTYPE html> 2<html lang="pt-BR"> 3<head> 4 <meta charset="utf-8"> 5 <title>BR-Linux.org</title> 6 <meta name="HandheldFriendly" content="True"> 7 <meta name="MobileOptimized" content="320"> 8 <meta name="viewport" content="width=device-width, initial-scale=1"> 9 <meta name="description" content="Desde 1996 levando o Linux a sério"> 10 11 <meta property="og:type" content="website"> 12 <meta name="twitmsg" content="BR-Linux.org https://br-linux.org/"> 13 <meta property="og:title" content="BR-Linux.org"> 14 <meta property="og:site_name" content="BR-Linux.org"> 15 <meta property="og:image" content="https://br-linux.org/axethemes/brlinux-ng/images/apple-touch-icon.png"> 16 <meta property="og:url" content="https://br-linux.org/"> 17 <meta property="og:description" content="Desde 1996 levando o Linux a sério"> 18 <meta property="og:locale" content="pt_BR"> 19 20 <meta name="fediverse:creator" content="@[email protected]" /> 21 <link rel="me" href="https://arram.senta-la.cloud/@autobrain"> 22 23 <meta name="twitter:card" content="summary_large_image"> 24 <meta name="twitter:site" content="@brlinuxblog"> 25 <meta name="robots" content="index, follow, max-image-preview:large"> 26 <meta name="referrer" content="no-referrer-when-downgrade"> 27 28 <meta name="generator" content="Axe 0.98a.3" /> 29 <meta name="builddate" content="Sat, 29 Aug 2026 20:10:48 -0300" /> 30 <link rel="canonical" href="https://br-linux.org/"> 31 32 <link href="https://br-linux.org/axethemes/brlinux-ng/images/favicon.ico" rel="icon"> 33 <link href="https://br-linux.org/axethemes/brlinux-ng/images/brlinux-bldg.jpg" rel="apple-touch-icon"> 34 35 <link rel="stylesheet" href="https://br-linux.org/axethemes/brlinux-ng/css/style.css?j=8" type="text/css"> 36 <link rel="stylesheet" href="https://br-linux.org/axethemes/brlinux-ng/css/icons-mask.css" type="text/css"> 37 <link href="https://br-linux.org/feed.xml" rel="alternate" title="BR-Linux.org RSS Feed" type="application/rss+xml"> 38</head> 39<body> 40 41 <div id="page"> 42 <div class="top-navigation-container"> 43 44 <div id="header"> 45 <h1><a href="https://br-linux.org/"><span class="brand-gold">BR-Linux</span><span class="brand-white">.org</span></a></h1> 46 <div class="description"><a href="https://br-linux.org/faq-linux">Linux</a> levado a sério desde 1996</div> 47 </div> 48 49 <nav class="header-navigation"> 50 <ul class="main-menu"> 51 <li class="menu-root-item"><a href="https://br-linux.org/indicar" class="menu-item item-suggest"><span class="submit-news-accent"><b>Sugerir notÃcia</b></span></a></li> 52 53 <li class="dropdown-trigger level-1"> 54 <input type="checkbox" id="nav-toggle-cb" class="nav-toggle-input"> 55 <label for="nav-toggle-cb" class="menu-item item-folder">Navegação</label> 56 57 <ul class="dropdown-menu tier-1"> 58 <li><a href="https://br-linux.org/faq-linux" class="sub-item item-whatis">O que é Linux</a></li> 59 <li><a href="https://br-linux.org/download" class="sub-item item-download">Download Linux</a></li> 60 <li><a href="https://br-linux.org/apostila-linux/" class="sub-item item-tutorial">Apostila Linux</a></li> 61 62 <li class="dropdown-trigger level-2"> 63 <input type="checkbox" id="network-toggle-cb" class="nav-toggle-input"> 64 <label for="network-toggle-cb" class="sub-item item-network">Visite também</label> 65 66 <ul class="dropdown-menu tier-2"> 67 <li><a href="https://br-linux.org/redir/redir-news-ul.php" target="_top" class="sub-item net-under">UnderLinux</a></li> 68 <li><a href="https://br-linux.org/redir/redir-news-dl.php" target="_parent" class="sub-item net-dicas">Dicas-L</a></li> 69 <li><a href="https://br-linux.org/redir/redir-news-psl.php" target="_parent" class="sub-item net-softlivre">SoftwareLivre.org</a></li> 70 <li><a href="https://www.efetividade.net/2007/09/07/como-fazer-seu-curriculo-modelos-originais-de-curriculum-vitae-e-dicas-de-preenchimento/" class="sub-item net-resume">CurrÃculo</a></li> 71 <li><a href="https://efetividade.net/" class="sub-item net-efetividade">Efetividade</a></li> 72 <li><a href="https://br-arduino.org/" class="sub-item net-arduino">Arduino</a></li> 73 </ul> 74 </li> 75 </ul> 76 </li> 77 </ul> 78 </nav> 79 </div> <div id="wrapper"> 80 <div id="content"> 81 <article class="post" data-post-date="29/08/2026"> 82 <h2><a href="2026/01/editorial-debian-votou-e-aprovou-uso-de-ia-no-codigo-da-distribuicao.html" rel="bookmark">Editorial: Debian votou e aprovou uso de IA no código da distribuição</a></h2> 83 84 <div class="entry"> 85 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distribuicoes.html">distribuicoes</a>, <a href="https://br-linux.org/tag-distopia.html">distopia</a>, <a href="https://br-linux.org/tag-editorial.html">editorial</a> 86 <div class="entry-content"> 87 <p>Neste final de semana o projeto Debian concluiu a votação interna sobre como se posicionar a respeito de código gerado por IA, que noticiamos <a href="https://br-linux.org/2026/01/slop-debian-vai-votar-sobre-passar-a-recusar-codigos-gerados-por-ia.html">no final de julho</a>, e foi uma conclusão francamente favorável ao uso de IA: <a href="https://lwn.net/ml/all/[email protected]/">a opção aprovada é aceitar o "uso responsável de IA generativa"</a>, sem colocar grandes ressalvas ou crÃticas â e nem mesmo limitações, ou exigência de que a prática seja indicada ou informada.</p> 88<p>Curiosamente, entre as outras 8 opções aptas a receber voto, a que ficou mais bem posicionada à frente da vencedora (no complexo método de votação adotado pelo projeto) foi a opção 8: âEvitar o uso de LLM: a destruição climática é um obstáculoâ.</p> 89<p>Quando eu decidi retomar o BR-Linux, há poucos meses, sabia que o cenário a ser coberto envolvia bastante IA (tanto no desenvolvimento de softw
89are quanto no cenário de segurança da informação, entre outros), mas confirmo: não esperava noticiar <a href="https://br-linux.org/2026/01/criador-do-rsync-responde-mal-a-controversia-sobre-as-regressoes-causadas-pelo-seu-uso-de-vibe-coding.html">regressões de segurança no rsync causadas</a> por confiança excessiva do desenvolvedor em IA, não esperava ver <a href="https://br-linux.org/2026/01/techbro-linus-torvalds-sublinha-de-novo-que-o-seu-kernel-nao-e-anti-ia-e-nem-visa-ser-um-projeto-social.html">o Linus Torvalds dizendo</a> que quem não curte IA no kernel deveria fazer um fork, e muito menos esperava o Debian se posicionar oficialmente a favor de IA.</p> 90<p>Estou nesta estrada <mark>há tempo demais para esperar que os desenvolvedores do rsync, do Linux ou do Debian tenham os mesmos posicionamentos que eu</mark>. Eles são adultos, e podem escolher seus posicionamentos. Mas entre tantas coisas que podem e devem ser discutidas sobre o uso de IA no desenvolvimento de software, eu não vejo como esses atores especÃficos podem deixar de valorizar o próprio contexto do licenciamento: a percepção de que ela dilui e enfraquece as licenças de software livre e de código aberto, pois cria obras derivadas sem atribuir a autoria original, nem manter as restrições ou liberdades da obra original.</p> 91<p>Vou precisar de um tempo pra pensar sobre meu papel nisso, porque o que eu quero é escrever sobre aplicativos e técnicas, para valorizar a comunidade, mas nas condições atuais eu perdi um pouco a clareza sobre qual é essa comunidade, e as consequências de valorizá-la. </p> 92<p>Não quer dizer que o BR-Linux está entrando em hiato novamente, mas só que preciso pensar a respeito de como ele se encaixa nesse cenário que, nas semanas recentes, mudou tanto. Eu estava em silêncio sobre isso há alguns dias, mas agora achei melhor compartilhar com vocês.</p> 93<p><!-- #remaxe blog: brlinux --></p> 94 95 </div> 96 </div> 97 98 <p class="postmetadata"> 99 <div class="reaction-container"> 100 <center><div class="reaction-box"> 101 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 102 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 103 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 104 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 105 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 106 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 107 </div></center> 108 109 110
110<script> 111 (function() { 112 // retorna um slug a partir do link (href) do post 113 function extractSlug(path) { 114 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 115 return match ? match[1] : path.split('/').pop().replace('.html', ''); 116 } 117 118 const currentScript = document.currentScript; 119 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 120 const box = postWrapper.querySelector('.reaction-box'); 121 122 // Primeiro procura por um link que termina em .html 123 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 124 125 // Se não achar, aceita o primeiro link que houver 126 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 127 128 let finalSlug = null; 129 /* 130 if (postLinkEl) { 131 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 132 } 133 134 // Como último recurso, pega o link da página corrente 135 if (!finalSlug) { 136 finalSlug = extractSlug(window.location.pathname) || 'index'; 137 } 138 */ 139 140 finalSlug = extractSlug("editorial-debian-votou-e-aprovou-uso-de-ia-no-codigo-da-distribuicao"); 141 142 if (finalSlug && box) { 143 box.setAttribute('data-slug', finalSlug); 144 145 // garante que exista o contexto da janela global 146 if (!window.ReactionComponents) { 147 window.ReactionComponents = {}; 148 } 149 window.ReactionComponents[finalSlug] = box; 150 } 151 })(); 152 </script>
152 153 </div> 154 155 156 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/editorial-debian-votou-e-aprovou-uso-de-ia-no-codigo-da-distribuicao.html#disqus_thread">Comentar</a> | 157 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/editorial-debian-votou-e-aprovou-uso-de-ia-no-codigo-da-distribuicao.html">Link para compartilhar</a><br> 158 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 159 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 29/08/2026 160 </p> 161 </article> 162 <article class="post" data-post-date="17/08/2026"> 163 <h2><a href="2026/01/lancado-o-linux-72.html" rel="bookmark">Lançado o Linux 7.2</a></h2> 164 165 <div class="entry"> 166 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-kernel.html">kernel</a> 167 <div class="entry-content"> 168 <p>Saiu a nova versão do kernel open source Linux, trazendo novidades que incluem mais desempenho multitarefa, melhorias no tratamento de swap em disco, mais desempenho em sistemas de arquivos ext4 e exFAT (comum em cartões SD e pen drives) e <a href="https://kernelnewbies.org/Linux_7.2">muito mais</a>.</p> 169<p><figure><br /> 170 <img alt="A palavra Linux" src="https://static.efetividade.net/img/shutterstock-395657257-8-768x432-78630.jpg"><br /> 171</figure></p> 172<p>Essa também é a versão em que se consolidam aquelas retiradas de código histórico, como suporte a CPUs 486 e a placas de vÃdeo Hercules, que comentamos aqui ao longo do seu perÃodo de desenvolvimento.</p> 173<p>O LWN fez a conta, e essa versão envolveu 2.100 desenvolvedores individuais, e 5% dos commits incluem a tag que indica uso de IAâ¦</p> 174<p>Referência: <a href="https://lwn.net/Articles/1088991/">The 7.2 kernel has been released [LWN.net]</a></p> 175<p><!-- #remaxe blog: brlinux --></p> 176 177 </div> 178 </div> 179 180 <p class="postmetadata"> 181 <div class="reaction-container"> 182 <center><div class="reaction-box"> 183 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 184 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 185 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 186 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 187 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 188 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 189 </div></center> 190 191 192
192<script> 193 (function() { 194 // retorna um slug a partir do link (href) do post 195 function extractSlug(path) { 196 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 197 return match ? match[1] : path.split('/').pop().replace('.html', ''); 198 } 199 200 const currentScript = document.currentScript; 201 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 202 const box = postWrapper.querySelector('.reaction-box'); 203 204 // Primeiro procura por um link que termina em .html 205 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 206 207 // Se não achar, aceita o primeiro link que houver 208 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 209 210 let finalSlug = null; 211 /* 212 if (postLinkEl) { 213 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 214 } 215 216 // Como último recurso, pega o link da página corrente 217 if (!finalSlug) { 218 finalSlug = extractSlug(window.location.pathname) || 'index'; 219 } 220 */ 221 222 finalSlug = extractSlug("lancado-o-linux-72"); 223 224 if (finalSlug && box) { 225 box.setAttribute('data-slug', finalSlug); 226 227 // garante que exista o contexto da janela global 228 if (!window.ReactionComponents) { 229 window.ReactionComponents = {}; 230 } 231 window.ReactionComponents[finalSlug] = box; 232 } 233 })(); 234 </script>
234 235 </div> 236 237 238 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/lancado-o-linux-72.html#disqus_thread">Comentar</a> | 239 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/lancado-o-linux-72.html">Link para compartilhar</a><br> 240 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 241 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 17/08/2026 242 </p> 243 </article> 244 <article class="post" data-post-date="17/08/2026"> 245 <h2><a href="2026/01/debian-comemora-33-anos-de-codigo-aberto.html" rel="bookmark">Debian comemora 33 anos de código aberto</a></h2> 246 247 <div class="entry"> 248 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distribuicoes.html">distribuicoes</a>, <a href="https://br-linux.org/tag-comunidade.html">comunidade</a> 249 <div class="entry-content"> 250 <p>Fundado em 1993 por Ian Murdock, o Debian comemorou 33 anos neste final de semana, e segue sendo um dos projetos fundamentais no ecossistema Linux.</p> 251<p>Quando o saudoso Ian <a href="https://wiki.debian.org/DebianHistory?action=AttachFile&do=get&target=Debian-announcement-1993.txt">anunciou o projeto,</a> a palavra distribuição ainda nem havia se popularizado para se referir ao projeto (mas já servia para designar o conjunto de pacotes), e ele avisou que estava criando um novo "release" do Linux.</p> 252<p><figure><br /> 253 <img alt="Logo do Debian" src="https://static.efetividade.net/img/images-png-596-82586.jpg"><br /> 254</figure></p> 255<p>Alinhado aos princÃpios de abertura de código que ainda estavam se firmando (e que ele depois ajudou a codificar), o Debian passou a ser desenvolvido de forma aberta e colaborativa, para não repetir outros projetos que produziam uma coleção de pacotes de software mais ou menos compatibilizados, e sim um sistema operacional cuidadosamente mantido e desenvolvido com o envolvimento de seus usuários e da comunidade.</p> 256<p>Curiosamente, Ian Murdock mais tarde declarou ter se arrependido de chamar a distribuição de âGNU/Linuxâ â em 2011 ele explicou que esse nome não refletia a forma como o ecossistema se desenvolveu, nem como o público se referia ao software.</p> 257<p>O Debian foi fundado um mês depois do Slackware, e essa dupla de 1993 hoje forma o conjunto das distribuições Linux há mais tempo mantidas continuamente. O projeto também nasceu um ano antes do Red Hat, e 3 anos antes do nosso BR-Linux.</p> 258<p>Feliz aniversário!</p> 259<p>Referência: <a href="https://bits.debian.org/2026/08/debian-turns-33.html">Debian turns 33!</a></p> 260<p><!-- #remaxe blog: brlinux --></p> 261 262 </div> 263 </div> 264 265 <p class="postmetadata"> 266 <div class="reaction-container"> 267 <center><div class="reaction-box"> 268 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 269 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 270 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 271 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 272 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 273 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 274 </div></center> 275 276 277
277<script> 278 (function() { 279 // retorna um slug a partir do link (href) do post 280 function extractSlug(path) { 281 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 282 return match ? match[1] : path.split('/').pop().replace('.html', ''); 283 } 284 285 const currentScript = document.currentScript; 286 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 287 const box = postWrapper.querySelector('.reaction-box'); 288 289 // Primeiro procura por um link que termina em .html 290 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 291 292 // Se não achar, aceita o primeiro link que houver 293 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 294 295 let finalSlug = null; 296 /* 297 if (postLinkEl) { 298 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 299 } 300 301 // Como último recurso, pega o link da página corrente 302 if (!finalSlug) { 303 finalSlug = extractSlug(window.location.pathname) || 'index'; 304 } 305 */ 306 307 finalSlug = extractSlug("debian-comemora-33-anos-de-codigo-aberto"); 308 309 if (finalSlug && box) { 310 box.setAttribute('data-slug', finalSlug); 311 312 // garante que exista o contexto da janela global 313 if (!window.ReactionComponents) { 314 window.ReactionComponents = {}; 315 } 316 window.ReactionComponents[finalSlug] = box; 317 } 318 })(); 319 </script>
319 320 </div> 321 322 323 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/debian-comemora-33-anos-de-codigo-aberto.html#disqus_thread">Comentar</a> | 324 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/debian-comemora-33-anos-de-codigo-aberto.html">Link para compartilhar</a><br> 325 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 326 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 17/08/2026 327 </p> 328 </article> 329 <article class="post" data-post-date="14/08/2026"> 330 <h2><a href="2026/01/linux-mint-atualiza-com-o-kernel-70-a-imagem-iso-da-sua-versao-223-lte.html" rel="bookmark">Linux Mint atualiza com o kernel 7.0 a imagem ISO da sua versão 22.3 LTE</a></h2> 331 332 <div class="entry"> 333 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distribuicoes.html">distribuicoes</a> 334 <div class="entry-content"> 335 <p>A versão do Linux Mint lançada no inÃcio deste ano, e com suporte até 2029, acaba de ter <a href="https://www.linuxmint.com/hwe.php">sua imagem ISO HWE</a> atualizada pra incluir um kernel mais recente, visando atender a quem tem hardware que demanda o Linux mais recente.</p> 336<p>As imagens HWE ('hardware enablement') do Linux Mint são atualizações ocasionais que incluem um kernel atualizado, junto ao software da versão corrente da distribuição, e incluem um aviso: âUse uma imagem ISO HWE apenas se a ISO comum não funcionar no seu computadorâ.</p> 337<p>Mais detalhes: <a href="https://linuxiac.com/linux-mint-22-3-gets-new-hwe-isos-powered-by-linux-kernel-7-0/">Linux Mint 22.3 Gets New HWE ISOs Powered by Linux Kernel 7.0</a>.</p> 338<p><!-- #remaxe blog: brlinux --></p> 339 340 </div> 341 </div> 342 343 <p class="postmetadata"> 344 <div class="reaction-container"> 345 <center><div class="reaction-box"> 346 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 347 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 348 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 349 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 350 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 351 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 352 </div></center> 353 354 355
355<script> 356 (function() { 357 // retorna um slug a partir do link (href) do post 358 function extractSlug(path) { 359 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 360 return match ? match[1] : path.split('/').pop().replace('.html', ''); 361 } 362 363 const currentScript = document.currentScript; 364 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 365 const box = postWrapper.querySelector('.reaction-box'); 366 367 // Primeiro procura por um link que termina em .html 368 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 369 370 // Se não achar, aceita o primeiro link que houver 371 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 372 373 let finalSlug = null; 374 /* 375 if (postLinkEl) { 376 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 377 } 378 379 // Como último recurso, pega o link da página corrente 380 if (!finalSlug) { 381 finalSlug = extractSlug(window.location.pathname) || 'index'; 382 } 383 */ 384 385 finalSlug = extractSlug("linux-mint-atualiza-com-o-kernel-70-a-imagem-iso-da-sua-versao-223-lte"); 386 387 if (finalSlug && box) { 388 box.setAttribute('data-slug', finalSlug); 389 390 // garante que exista o contexto da janela global 391 if (!window.ReactionComponents) { 392 window.ReactionComponents = {}; 393 } 394 window.ReactionComponents[finalSlug] = box; 395 } 396 })(); 397 </script>
397 398 </div> 399 400 401 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/linux-mint-atualiza-com-o-kernel-70-a-imagem-iso-da-sua-versao-223-lte.html#disqus_thread">Comentar</a> | 402 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/linux-mint-atualiza-com-o-kernel-70-a-imagem-iso-da-sua-versao-223-lte.html">Link para compartilhar</a><br> 403 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 404 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 14/08/2026 405 </p> 406 </article> 407 <article class="post" data-post-date="13/08/2026"> 408 <h2><a href="2026/01/rsync-35-atualizacao-extraordinaria-resolve-33-questoes-de-seguranca.html" rel="bookmark">Rsync 3.5: atualização "extraordinária" resolve 33 questões de segurança</a></h2> 409 410 <div class="entry"> 411 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-software.html">software</a>, <a href="https://br-linux.org/tag-seguranca.html">seguranca</a>, <a href="https://br-linux.org/tag-administracao.html">administracao</a> 412 <div class="entry-content"> 413 <p>O Rsync 3.5 acaba de ser lançado , e <a href="https://download.samba.org/pub/rsync/NEWS#3.5.0">o arquivo NEWS da versão</a> o descreve como um âlançamento extraordinárioâ, associado ao volume de problemas de segurança. Os 33 problemas de segurança foram localizados após uma auditoria focada no tratamento de paths, em questões associadas ao uso do rsync como daemon, e outros aspectos descritos na documentação.</p> 414<p>A versão inclui a correção para vários CVEs, indicando prioridade para a instalação do upgrade.</p> 415<p><!-- #remaxe blog: brlinux --></p> 416 417 </div> 418 </div> 419 420 <p class="postmetadata"> 421 <div class="reaction-container"> 422 <center><div class="reaction-box"> 423 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 424 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 425 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 426 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 427 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 428 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 429 </div></center> 430 431 432
432<script> 433 (function() { 434 // retorna um slug a partir do link (href) do post 435 function extractSlug(path) { 436 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 437 return match ? match[1] : path.split('/').pop().replace('.html', ''); 438 } 439 440 const currentScript = document.currentScript; 441 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 442 const box = postWrapper.querySelector('.reaction-box'); 443 444 // Primeiro procura por um link que termina em .html 445 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 446 447 // Se não achar, aceita o primeiro link que houver 448 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 449 450 let finalSlug = null; 451 /* 452 if (postLinkEl) { 453 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 454 } 455 456 // Como último recurso, pega o link da página corrente 457 if (!finalSlug) { 458 finalSlug = extractSlug(window.location.pathname) || 'index'; 459 } 460 */ 461 462 finalSlug = extractSlug("rsync-35-atualizacao-extraordinaria-resolve-33-questoes-de-seguranca"); 463 464 if (finalSlug && box) { 465 box.setAttribute('data-slug', finalSlug); 466 467 // garante que exista o contexto da janela global 468 if (!window.ReactionComponents) { 469 window.ReactionComponents = {}; 470 } 471 window.ReactionComponents[finalSlug] = box; 472 } 473 })(); 474 </script>
474 475 </div> 476 477 478 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/rsync-35-atualizacao-extraordinaria-resolve-33-questoes-de-seguranca.html#disqus_thread">Comentar</a> | 479 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/rsync-35-atualizacao-extraordinaria-resolve-33-questoes-de-seguranca.html">Link para compartilhar</a><br> 480 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 481 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 13/08/2026 482 </p> 483 </article> 484 <article class="post" data-post-date="13/08/2026"> 485 <h2><a href="2026/01/usuarios-questionam-a-transparencia-do-euro-office.html" rel="bookmark">Usuários questionam a transparência do Euro-Office</a></h2> 486 487 <div class="entry"> 488 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-comunidade.html">comunidade</a>, <a href="https://br-linux.org/tag-mercado.html">mercado</a>, <a href="https://br-linux.org/tag-software.html">software</a> 489 <div class="entry-content"> 490 <p>Veja também <a href="https://github.com/Euro-Office/DocumentServer/issues/277#issuecomment-5205302028">a resposta do projeto</a>.</p> 491<div class=userpost> 492<p><cite>Enviado por Renato Yamane, a partir de uma thread no Github</cite></p> 493<div class=userpostbody>O Euro-Office foi lançado em 27/Março/2026, com a sua primeira versão em 9/Junho/2026. A iniciativa parecia muito boa: mais transparência, maior colaboração, menor dependência da influência Russa, sendo uma provável alternativa ao Microsoft O365.</p> 494<p>A intenção era de lançar um patch a cada 2 semanas, porém como pode ser visto na edição do primeiro comentário, as datas nunca são cumpridas, ficando reduzido a uma versão inicial com o número da versão ainda errada.</p> 495<p>A página inicial do projeto lista 12 empresas como colaboradoras, porém nas minhas tentativas de contato com essas empresas, aparentemente elas só emprestaram o nome para ser incluÃdo na lista, sem colaborar com o desenvolvimento ou com suporte financeiro.</p> 496<p>Arregalei os olhos incrédulo quando uma das empresas me respondeu que a colaboração que eles dão ao projeto é basicamente um suporte moral: "...We wish the project success, and plan to use it in our products..." </p> 497<p>Aparentemente, há apenas UMA empresa por trás desse fork, que nasceu dizendo que a intenção era de melhorar a transparência do projeto, dentre outros maravilhosos argumentos, porém na minha percepção, tudo leva a crer que o fork foi lançado aproveitando a crise geo-polÃtica global e esperando que centenas de desenvolvedores abraçassem a causa, porém ninguém apareceu.</p> 498<p>Será que a única empresa por trás desse projeto dará conta de continuar o desenvolvimento de uma suÃte de escritório com quase 2 décadas de desenvolvimento (https://en.wikipedia.org/wiki/OnlyOffice)?</p> 499<p>Será que uma empresa que diz que a triagem dos "issues" seja feita em 48h, mas nem o próprio desenvolvedor que criou essa regra é capaz de seguir a própria regra, terá condições de dar sequência ao desenvolvimento desse projeto?</p> 500<p>Enfim, são muitas perguntas e raras respostas...</p></div> 501<div class=userlink><a href="https://github.com/Euro-Office/DocumentServer/issues/277">Referência: github.com</a></div> 502</div> 503<p><!-- #remaxe blog: brlinux --></p> 504 505 </div> 506 </div> 507 508 <p class="postmetadata"> 509 <div class="reaction-container"> 510 <center><div class="reaction-box"> 511 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 512 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 513 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 514 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 515 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 516 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 517 </div></center> 518 519 520
520<script> 521 (function() { 522 // retorna um slug a partir do link (href) do post 523 function extractSlug(path) { 524 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 525 return match ? match[1] : path.split('/').pop().replace('.html', ''); 526 } 527 528 const currentScript = document.currentScript; 529 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 530 const box = postWrapper.querySelector('.reaction-box'); 531 532 // Primeiro procura por um link que termina em .html 533 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 534 535 // Se não achar, aceita o primeiro link que houver 536 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 537 538 let finalSlug = null; 539 /* 540 if (postLinkEl) { 541 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 542 } 543 544 // Como último recurso, pega o link da página corrente 545 if (!finalSlug) { 546 finalSlug = extractSlug(window.location.pathname) || 'index'; 547 } 548 */ 549 550 finalSlug = extractSlug("usuarios-questionam-a-transparencia-do-euro-office"); 551 552 if (finalSlug && box) { 553 box.setAttribute('data-slug', finalSlug); 554 555 // garante que exista o contexto da janela global 556 if (!window.ReactionComponents) { 557 window.ReactionComponents = {}; 558 } 559 window.ReactionComponents[finalSlug] = box; 560 } 561 })(); 562 </script>
562 563 </div> 564 565 566 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/usuarios-questionam-a-transparencia-do-euro-office.html#disqus_thread">Comentar</a> | 567 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/usuarios-questionam-a-transparencia-do-euro-office.html">Link para compartilhar</a><br> 568 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 569 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 13/08/2026 570 </p> 571 </article> 572 <article class="post" data-post-date="13/08/2026"> 573 <h2><a href="2026/01/estudantes-do-ifsp-jacarei-e-ict-unifesp-criam-sistema-para-auxiliar-na-comunicacao-de-criancas-neurodivergentes.html" rel="bookmark">Estudantes do IFSP Jacareà e ICT-Unifesp criam sistema para auxiliar na comunicação de crianças neurodivergentes</a></h2> 574 575 <div class="entry"> 576 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-comunidade.html">comunidade</a> 577 <div class="entry-content"> 578 <p> 579No momento é gratuito e disponÃvel para Android e Windows â mas está planejada a inclusão no GitHub e adoção de desenvolvimento aberto. </p> 580<div class=userpost> 581<p><cite>Enviado por Júlia Zuchini (θifspjcr)</cite></p> 582<div class=userpostbody>O Papuguinho é 100% gratuito, feito para auxiliar profissionais e famÃlias, e conta com atualizações constantes.</p> 583<p>Um sistema 100% gratuito de Comunicação Aumentativa e Alternativa (CAA), o Papuguinho, foi desenvolvido por estudantes do Instituto Federal de São Paulo â Campus Jacareà (que atualmente conta com o apoio de outras instituições, como o Instituto de Ciência e Tecnologia da Unifesp - Campus São José dos Campos e a Unesp) para o público neurodivergente como um todo, incluindo crianças com Transtorno do Espectro Autista (TEA) e pessoas com dificuldades de fala e interação. Isso é possÃvel porque a CAA é um conjunto de ferramentas e estratégias que visa auxiliar pessoas com dificuldades de comunicação a expressar necessidades, pensamentos e sentimentos. O sistema também foi pensado e desenvolvido para atender tanto a profissionais da área quanto a famÃlias, o que torna o uso acessÃvel a todos. </p> 584<p><figure><br /> 585 <img alt="Logo do Papuguinho em um celular" src="https://static.efetividade.net/img/papuguinho-61244.jpeg"><br /> 586</figure></p> 587<p>O Papuguinho foi criado para atender à s necessidades reais de crianças com TEA e fortalece as conexões entre pais, cuidadores e crianças por meio de uma comunicação mais clara. O sistema funciona com pranchas visuais: uma interface intuitiva que permite à s crianças formarem frases faladas ao tocar em Ãcones coloridos. Ainda é possÃvel adaptar as pranchas à s necessidades individuais com temas customizáveis.</p> 588<p>Durante o processo de desenvolvimento, todas as etapas contaram com pesquisas, estudos e fundamentos. A prova está na própria escolha do nome e das cores usadas: após as pesquisas, ficou evidente a preferência por tons como azul e verde, além da relação com a natureza. O nome remete ao papagaio, ave conhecida por reproduzir sons, e, da mesma forma, o Papuguinho dá voz à s crianças, com o objetivo de ser um companheiro fiel que ajuda na expressão e na comunicação do dia a dia.</p> 589<p>Inicialmente, o aplicativo foi desenvolvido no FlutterFlow em busca de agilidade. Agora, porém, está sendo programado tradicionalmente â mantendo o Flutter â para permitir ajustes mais precisos no código e lançamentos multiplataforma, utilizando o Firebase como banco de dados. Futuramente, o projeto disponibilizará o código-fonte no GitHub, onde aceitará contribuições da comunidade. </p> 590<p>Atualmente, o Papuguinho está disponÃvel no site e para download no Android (via Play Store) e Windows (via Microsoft Store), com versões planejadas para macOS, iOS e Linux. 591</p></div> 592<div class=userlink><a href="https://jcr.ifsp.edu.br/index.php/component/content/article/17-ultimas-noticias/3055-estudantes-do-ifsp-campus-jacarei-e-do-ict-unifesp-criam-sistema-para-auxiliar-na-comunicacao-de-criancas-neurodivergentes">Referência: jcr.ifsp.edu.br</a></div> 593</div> 594<p><!-- #remaxe blog: brlinux --></p> 595 596 </div> 597 </div> 598 599 <p class="postmetadata"> 600 <div class="reaction-container"> 601 <center><div class="reaction-box"> 602 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 603 <button class="react-btn" data-type="laugh">
603𤣠<span class="count-laugh">0</span></button> 604 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 605 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 606 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 607 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 608 </div></center> 609 610 611
611<script> 612 (function() { 613 // retorna um slug a partir do link (href) do post 614 function extractSlug(path) { 615 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 616 return match ? match[1] : path.split('/').pop().replace('.html', ''); 617 } 618 619 const currentScript = document.currentScript; 620 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 621 const box = postWrapper.querySelector('.reaction-box'); 622 623 // Primeiro procura por um link que termina em .html 624 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 625 626 // Se não achar, aceita o primeiro link que houver 627 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 628 629 let finalSlug = null; 630 /* 631 if (postLinkEl) { 632 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 633 } 634 635 // Como último recurso, pega o link da página corrente 636 if (!finalSlug) { 637 finalSlug = extractSlug(window.location.pathname) || 'index'; 638 } 639 */ 640 641 finalSlug = extractSlug("estudantes-do-ifsp-jacarei-e-ict-unifesp-criam-sistema-para-auxiliar-na-comunicacao-de-criancas-neurodivergentes"); 642 643 if (finalSlug && box) { 644 box.setAttribute('data-slug', finalSlug); 645 646 // garante que exista o contexto da janela global 647 if (!window.ReactionComponents) { 648 window.ReactionComponents = {}; 649 } 650 window.ReactionComponents[finalSlug] = box; 651 } 652 })(); 653 </script>
653 654 </div> 655 656 657 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/estudantes-do-ifsp-jacarei-e-ict-unifesp-criam-sistema-para-auxiliar-na-comunicacao-de-criancas-neurodivergentes.html#disqus_thread">Comentar</a> | 658 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/estudantes-do-ifsp-jacarei-e-ict-unifesp-criam-sistema-para-auxiliar-na-comunicacao-de-criancas-neurodivergentes.html">Link para compartilhar</a><br> 659 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 660 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 13/08/2026 661 </p> 662 </article> 663 <article class="post" data-post-date="13/08/2026"> 664 <h2><a href="2026/01/desenvolvedor-divulga-o-nexus-shell-169-gerenciar-servidores-linux-por-ssh-no-macos.html" rel="bookmark">Desenvolvedor divulga o Nexus Shell 1.6.9: gerenciar servidores Linux por SSH no macOS</a></h2> 665 666 <div class="entry"> 667 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-software.html">software</a> 668 <div class="entry-content"> 669 670<div class=userpost> 671<p><cite>Enviado por Sameral (marketingθnexusshell⸱app)</cite></p> 672<div class=userpostbody>Sou o desenvolvedor do Nexus Shell, um cliente SSH proprietário e nativo para macOS, criado em SwiftUI para administrar servidores Linux a partir de Macs com Apple Silicon. A versão 1.6.9 reúne terminal com abas, gerenciamento de arquivos via SFTP, chaves SSH, controles para contêineres Docker, monitoramento somente leitura de servidor e rede, além de registros de sessão criptografados localmente. O aplicativo requer macOS 14.2 ou posterior; o uso pessoal e não comercial do SSH básico é gratuito, e o cadastro inclui sete dias de avaliação Pro.</p> 673<p>A proposta é manter uma ferramenta visualmente integrada ao macOS, simples para o trabalho diário e sem acumular recursos desnecessários. A versão Pro custa US$ 12,88 em pagamento único. Há também um TestFlight público para a futura versão da Mac App Store. O Nexus Shell não é software livre nem um cliente Linux: ele é uma ferramenta para usuários de Mac que administram máquinas Linux e outros servidores por SSH. A página oficial contém downloads assinados, requisitos, polÃtica de privacidade e o histórico completo de versões.</p></div> 674<div class=userlink><a href="https://nexusshell.app/pt-BR/?utm_source=br_linux%6%utm_medium=editorial%6%utm_campaign=v1_6_9">Referência: nexusshell.app</a></div> 675</div> 676<p><!-- #remaxe blog: brlinux --></p> 677 678 </div> 679 </div> 680 681 <p class="postmetadata"> 682 <div class="reaction-container"> 683 <center><div class="reaction-box"> 684 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 685 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 686 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 687 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 688 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 689 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 690 </div></center> 691 692 693
693<script> 694 (function() { 695 // retorna um slug a partir do link (href) do post 696 function extractSlug(path) { 697 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 698 return match ? match[1] : path.split('/').pop().replace('.html', ''); 699 } 700 701 const currentScript = document.currentScript; 702 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 703 const box = postWrapper.querySelector('.reaction-box'); 704 705 // Primeiro procura por um link que termina em .html 706 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 707 708 // Se não achar, aceita o primeiro link que houver 709 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 710 711 let finalSlug = null; 712 /* 713 if (postLinkEl) { 714 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 715 } 716 717 // Como último recurso, pega o link da página corrente 718 if (!finalSlug) { 719 finalSlug = extractSlug(window.location.pathname) || 'index'; 720 } 721 */ 722 723 finalSlug = extractSlug("desenvolvedor-divulga-o-nexus-shell-169-gerenciar-servidores-linux-por-ssh-no-macos"); 724 725 if (finalSlug && box) { 726 box.setAttribute('data-slug', finalSlug); 727 728 // garante que exista o contexto da janela global 729 if (!window.ReactionComponents) { 730 window.ReactionComponents = {}; 731 } 732 window.ReactionComponents[finalSlug] = box; 733 } 734 })(); 735 </script>
735 736 </div> 737 738 739 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/desenvolvedor-divulga-o-nexus-shell-169-gerenciar-servidores-linux-por-ssh-no-macos.html#disqus_thread">Comentar</a> | 740 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/desenvolvedor-divulga-o-nexus-shell-169-gerenciar-servidores-linux-por-ssh-no-macos.html">Link para compartilhar</a><br> 741 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 742 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 13/08/2026 743 </p> 744 </article> 745 <article class="post" data-post-date="30/07/2026"> 746 <h2><a href="2026/01/nem-a-oracle-quer-slop-projeto-openjdk-tambem-rejeita-codigo-gerado-por-ia.html" rel="bookmark">Nem a Oracle quer slop: Projeto OpenJDK também rejeita código gerado por IA</a></h2> 747 748 <div class="entry"> 749 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distopia.html">distopia</a>, <a href="https://br-linux.org/tag-desenvolvedores.html">desenvolvedores</a> 750 <div class="entry-content"> 751 <p>Via James Benett chega a notÃcia de que a Oracle â que investe milhões para convencer seus clientes a usarem IA â também proÃbe contribuições baseadas em LLM para um de seus principais projetos open source: o OpenJDK.</p> 752<p><figure><br /> 753 <img alt="Logos da Oracle e do OpenJDK" src="https://static.efetividade.net/img/openjdk-765188-png-800-51159.jpg"><br /> 754</figure></p> 755<p>A <a href="https://openjdk.org/legal/ai">polÃtica em vigor</a>, aprovada pela governança interna, não deixa a menor dúvida:</p> 756<blockquote><p> 757As contribuições na comunidade OpenJDK não poderão incluir conteúdo gerado, parcial ou totalmente, por LLMs, diffusion ou sistemas similares de deep-learning. O conteúdo, neste contexto, inclui, entre outros, código-fonte, texto e imagens em repositórios git do OpenJDK, pull requests no GitHub, mensagens de e-mail, páginas wiki e chamados do JBS. 758</p></blockquote> 759<p>Essa polÃtica ainda é a versão preliminar, enquanto a Oracle, no seu papel de patrocinadora corporativa da Comunidade OpenJDK, elabora uma polÃtica mais completa limitando o uso de ferramentas de IA generativa nas contribuições ao OpenJDK. </p> 760<p>Referência: <a href="https://infosec.exchange/@ubernostrum/117005003995185703">James Bennett: "I just learned that Oracle, whâ¦" - Infosec Exchange</a></p> 761<p><!-- #remaxe blog: brlinux --></p> 762 763 </div> 764 </div> 765 766 <p class="postmetadata"> 767 <div class="reaction-container"> 768 <center><div class="reaction-box"> 769 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 770 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 771 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 772 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 773 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 774 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 775 </div></center> 776 777 778
778<script> 779 (function() { 780 // retorna um slug a partir do link (href) do post 781 function extractSlug(path) { 782 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 783 return match ? match[1] : path.split('/').pop().replace('.html', ''); 784 } 785 786 const currentScript = document.currentScript; 787 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 788 const box = postWrapper.querySelector('.reaction-box'); 789 790 // Primeiro procura por um link que termina em .html 791 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 792 793 // Se não achar, aceita o primeiro link que houver 794 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 795 796 let finalSlug = null; 797 /* 798 if (postLinkEl) { 799 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 800 } 801 802 // Como último recurso, pega o link da página corrente 803 if (!finalSlug) { 804 finalSlug = extractSlug(window.location.pathname) || 'index'; 805 } 806 */ 807 808 finalSlug = extractSlug("nem-a-oracle-quer-slop-projeto-openjdk-tambem-rejeita-codigo-gerado-por-ia"); 809 810 if (finalSlug && box) { 811 box.setAttribute('data-slug', finalSlug); 812 813 // garante que exista o contexto da janela global 814 if (!window.ReactionComponents) { 815 window.ReactionComponents = {}; 816 } 817 window.ReactionComponents[finalSlug] = box; 818 } 819 })(); 820 </script>
820 821 </div> 822 823 824 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/nem-a-oracle-quer-slop-projeto-openjdk-tambem-rejeita-codigo-gerado-por-ia.html#disqus_thread">Comentar</a> | 825 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/nem-a-oracle-quer-slop-projeto-openjdk-tambem-rejeita-codigo-gerado-por-ia.html">Link para compartilhar</a><br> 826 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 827 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 30/07/2026 828 </p> 829 </article> 830 <article class="post" data-post-date="30/07/2026"> 831 <h2><a href="2026/01/liberdade-no-freebsd-ops-ainda-tinha-alguns-trechos-sob-licenca-gpl.html" rel="bookmark">Liberdade no FreeBSD: Ops! Ainda tinha alguns trechos sob licença GPL</a></h2> 832 833 <div class="entry"> 834 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-copyright.html">copyright</a> 835 <div class="entry-content"> 836 <p>Via <a href="https://mastodon.bsd.cafe/@grahamperrin/117001295612924184">@[email protected]</a> chegou a informação de que as notÃcias sobre o fim do código GPL na base do FreeBSD foram precipitadas: ainda há alguns fragmentos (sob licença dupla) em drivers.</p> 837<p><figure><br /> 838 <img alt="Logo do FreeBSD" src="https://static.efetividade.net/img/LogoFreeBSD-09-png-533-69112-30631.jpg"><br /> 839</figure></p> 840<p>O Fossforce <a href="https://fossforce.com/2026/07/oopsies-freebsd-devs-say-theres-still-gpl-in-the-kernel/">tem mais detalhes</a>, incluindo a referência sobre qual o driver da Qualcomm que ainda afasta do FreeBSD o atestado de ausência de código GPL na sua base.</p> 841<p>Referência: <a href="https://arram.senta-la.cloud/@autobrain/117003165952748079">VISITE O DECORADO: "@grahamperrin interessante!" - Arram, senta lá, Cloud!</a></p> 842<p>Leia também: <a href="https://br-linux.org/2026/01/freebsd-16-conclui-com-sucesso-a-remocao-de-todo-o-codigo-gpl-do-seu-sistema-base.html">FreeBSD 16 conclui com sucesso a remoção de todo o código GPL do seu sistema-base</a>.</p> 843<p><!-- #remaxe blog: brlinux --></p> 844 845 </div> 846 </div> 847 848 <p class="postmetadata"> 849 <div class="reaction-container"> 850 <center><div class="reaction-box"> 851 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 852 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 853 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 854 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 855 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 856 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 857 </div></center> 858 859 860
860<script> 861 (function() { 862 // retorna um slug a partir do link (href) do post 863 function extractSlug(path) { 864 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 865 return match ? match[1] : path.split('/').pop().replace('.html', ''); 866 } 867 868 const currentScript = document.currentScript; 869 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 870 const box = postWrapper.querySelector('.reaction-box'); 871 872 // Primeiro procura por um link que termina em .html 873 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 874 875 // Se não achar, aceita o primeiro link que houver 876 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 877 878 let finalSlug = null; 879 /* 880 if (postLinkEl) { 881 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 882 } 883 884 // Como último recurso, pega o link da página corrente 885 if (!finalSlug) { 886 finalSlug = extractSlug(window.location.pathname) || 'index'; 887 } 888 */ 889 890 finalSlug = extractSlug("liberdade-no-freebsd-ops-ainda-tinha-alguns-trechos-sob-licenca-gpl"); 891 892 if (finalSlug && box) { 893 box.setAttribute('data-slug', finalSlug); 894 895 // garante que exista o contexto da janela global 896 if (!window.ReactionComponents) { 897 window.ReactionComponents = {}; 898 } 899 window.ReactionComponents[finalSlug] = box; 900 } 901 })(); 902 </script>
902 903 </div> 904 905 906 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/liberdade-no-freebsd-ops-ainda-tinha-alguns-trechos-sob-licenca-gpl.html#disqus_thread">Comentar</a> | 907 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/liberdade-no-freebsd-ops-ainda-tinha-alguns-trechos-sob-licenca-gpl.html">Link para compartilhar</a><br> 908 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 909 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 30/07/2026 910 </p> 911 </article> 912 <article class="post" data-post-date="30/07/2026"> 913 <h2><a href="2026/01/abaixo-o-slop-gcc-tambem-vai-rejeitar-codigo-gerado-por-ia.html" rel="bookmark">Abaixo o slop: GCC também vai rejeitar código gerado por IA</a></h2> 914 915 <div class="entry"> 916 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distopia.html">distopia</a>, <a href="https://br-linux.org/tag-desenvolvedores.html">desenvolvedores</a> 917 <div class="entry-content"> 918 <p>A famÃlia de compiladores GCC se une à lista de projetos que decidiram rejeitar contribuições significativas (no sentido de direitos autorais) derivadas de IA/LLM, com exceções especÃficas: alterações triviais, e casos de teste.</p> 919<p>Pelas <a href="https://gcc.gnu.org/pipermail/gcc/2026-July/248628.html">novas regras</a>, o GCC passa a recusar quaisquer contribuições que incluam material protegido por direitos autorais (ou seja, código significativo) e produzido por um LLMs ou baseado em resultados gerados por LLMs.</p> 920<p><figure><br /> 921 <img alt="Foto de bombeiro apagando incêndio em um container de lixo" src="https://static.efetividade.net/img/img-5671-21225558144.jpg-80181.webp"><br /> 922</figure></p> 923<p>Essa definição abrange não só código copiado diretamente de ferramentas como ChatGPT, Gemini ou GitHub Copilot, mas também quaisquer versões desse código posteriormente editadas ou reescritas por uma pessoa, caso a contribuição final ainda seja baseada no material gerado pelo sistema.</p> 924<p>Referência: <a href="https://linuxiac.com/gcc-adopts-policy-rejecting-significant-ai-generated-code/">GCC Adopts Policy Rejecting Significant AI-Generated Code</a></p> 925<p><!-- #remaxe blog: brlinux --></p> 926 927 </div> 928 </div> 929 930 <p class="postmetadata"> 931 <div class="reaction-container"> 932 <center><div class="reaction-box"> 933 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 934 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 935 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 936 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 937 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 938 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 939 </div></center> 940 941 942
942<script> 943 (function() { 944 // retorna um slug a partir do link (href) do post 945 function extractSlug(path) { 946 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 947 return match ? match[1] : path.split('/').pop().replace('.html', ''); 948 } 949 950 const currentScript = document.currentScript; 951 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 952 const box = postWrapper.querySelector('.reaction-box'); 953 954 // Primeiro procura por um link que termina em .html 955 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 956 957 // Se não achar, aceita o primeiro link que houver 958 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 959 960 let finalSlug = null; 961 /* 962 if (postLinkEl) { 963 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 964 } 965 966 // Como último recurso, pega o link da página corrente 967 if (!finalSlug) { 968 finalSlug = extractSlug(window.location.pathname) || 'index'; 969 } 970 */ 971 972 finalSlug = extractSlug("abaixo-o-slop-gcc-tambem-vai-rejeitar-codigo-gerado-por-ia"); 973 974 if (finalSlug && box) { 975 box.setAttribute('data-slug', finalSlug); 976 977 // garante que exista o contexto da janela global 978 if (!window.ReactionComponents) { 979 window.ReactionComponents = {}; 980 } 981 window.ReactionComponents[finalSlug] = box; 982 } 983 })(); 984 </script>
984 985 </div> 986 987 988 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/abaixo-o-slop-gcc-tambem-vai-rejeitar-codigo-gerado-por-ia.html#disqus_thread">Comentar</a> | 989 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/abaixo-o-slop-gcc-tambem-vai-rejeitar-codigo-gerado-por-ia.html">Link para compartilhar</a><br> 990 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 991 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 30/07/2026 992 </p> 993 </article> 994 <article class="post" data-post-date="30/07/2026"> 995 <h2><a href="2026/01/campanha-de-apoio-ao-youtuber-brasileiro-slackjeff-que-teve-seus-equipamentos-furtados.html" rel="bookmark">Campanha de apoio ao youtuber brasileiro Slackjeff, que teve seus equipamentos furtados</a></h2> 996 997 <div class="entry"> 998 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-comunidade.html">comunidade</a> 999 <div class="entry-content"> 1000 1001<div class=userpost> 1002<p><cite>Enviado por André Machado (andremachado⸱socialθoutlook⸱com)</cite></p> 1003<div class=userpostbody>O produtor de conteúdo Slackjeff teve sua casa assaltada e todos os seus equipamentos de trabalho subtraÃdos. Ele pede ajuda com doações através de uma chave Pix, divulgado no seu canal, pelo link abaixo.</div> 1004<p><figure><br /> 1005 <img alt="Banner do canal do SlackJeff" src="https://static.efetividade.net/img/CleanShot-2026-07-30-11-13-177908-png-800-47306.jpg"><br /> 1006</figure></p> 1007<div class=userlink><a href="https://www.youtube.com/watch?v=dn9P2SoKMJo">Referência: youtu.be</a></div> 1008</div> 1009<p><!-- #remaxe blog: brlinux --></p> 1010 1011 </div> 1012 </div> 1013 1014 <p class="postmetadata"> 1015 <div class="reaction-container"> 1016 <center><div class="reaction-box"> 1017 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 1018 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 1019 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 1020 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 1021 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 1022 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 1023 </div></center> 1024 1025 1026
1026<script> 1027 (function() { 1028 // retorna um slug a partir do link (href) do post 1029 function extractSlug(path) { 1030 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 1031 return match ? match[1] : path.split('/').pop().replace('.html', ''); 1032 } 1033 1034 const currentScript = document.currentScript; 1035 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 1036 const box = postWrapper.querySelector('.reaction-box'); 1037 1038 // Primeiro procura por um link que termina em .html 1039 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 1040 1041 // Se não achar, aceita o primeiro link que houver 1042 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 1043 1044 let finalSlug = null; 1045 /* 1046 if (postLinkEl) { 1047 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 1048 } 1049 1050 // Como último recurso, pega o link da página corrente 1051 if (!finalSlug) { 1052 finalSlug = extractSlug(window.location.pathname) || 'index'; 1053 } 1054 */ 1055 1056 finalSlug = extractSlug("campanha-de-apoio-ao-youtuber-brasileiro-slackjeff-que-teve-seus-equipamentos-furtados"); 1057 1058 if (finalSlug && box) { 1059 box.setAttribute('data-slug', finalSlug); 1060 1061 // garante que exista o contexto da janela global 1062 if (!window.ReactionComponents) { 1063 window.ReactionComponents = {}; 1064 } 1065 window.ReactionComponents[finalSlug] = box; 1066 } 1067 })(); 1068 </script>
1068 1069 </div> 1070 1071 1072 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/campanha-de-apoio-ao-youtuber-brasileiro-slackjeff-que-teve-seus-equipamentos-furtados.html#disqus_thread">Comentar</a> | 1073 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/campanha-de-apoio-ao-youtuber-brasileiro-slackjeff-que-teve-seus-equipamentos-furtados.html">Link para compartilhar</a><br> 1074 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 1075 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 30/07/2026 1076 </p> 1077 </article> 1078 <article class="post" data-post-date="27/07/2026"> 1079 <h2><a href="2026/01/slop-debian-vai-votar-sobre-passar-a-recusar-codigos-gerados-por-ia.html" rel="bookmark">Slop: Debian vai votar sobre passar a recusar códigos gerados por IA</a></h2> 1080 1081 <div class="entry"> 1082 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distribuicoes.html">distribuicoes</a>, <a href="https://br-linux.org/tag-distopia.html">distopia</a> 1083 <div class="entry-content"> 1084 <p>Enquanto torcemos para que os desenvolvedores do Debian escolham a opção obviamente correta, o projeto abriu a discussão de uma <a href="https://www.debian.org/vote/2026/vote_002">Resolução Geral sobre "Uso de LLM no Debian"</a>, já em andamento.</p> 1085<p><figure><br /> 1086 <img alt="Bombeiros apagando um incêndio num container de lixo" src="https://static.efetividade.net/img/Student-fire-fighter-extinquishing-dumpster-fire-jpg-800-43235.jpg"><br /> 1087</figure></p> 1088<p>No momento há 4 alternativas identificadas, cada uma com detalhamento e argumentação:</p> 1089<ul> 1090<li><strong>Proposta A</strong> - Proibir expressamente quaisquer contribuições para o Debian escritas com o uso ou assistência de LLMs ou outras ferramentas de IA generativa. 1091<li><strong>Proposta B</strong> - Permitir contribuições assistidas por IA. 1092<li><strong>Proposta C</strong> - Rejeitar LLMs ("IA" generativa) tanto quanto for viável 1093<li><strong>Proposta D</strong> - Aceitar contribuições de IA para trabalhos especÃficos do Debian 1094</ul> 1095<p>A página da Resolução Geral traz o detalhamento, inclusive quanto a minúcias que fazem diferença profunda na interpretação â por exemplo, sobre como cada proposta se aplica a código <em>upstream</em>, ou seja, recebido de outros projetos.</p> 1096<p>Referência: <a href="https://www.debian.org/vote/2026/vote_002">General Resolution: LLM usage in Debian</a></p> 1097<p><!-- #remaxe blog: brlinux --></p> 1098 1099 </div> 1100 </div> 1101 1102 <p class="postmetadata"> 1103 <div class="reaction-container"> 1104 <center><div class="reaction-box"> 1105 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 1106 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 1107 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 1108 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 1109 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 1110 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 1111 </div></center> 1112 1113 1114
1114<script> 1115 (function() { 1116 // retorna um slug a partir do link (href) do post 1117 function extractSlug(path) { 1118 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 1119 return match ? match[1] : path.split('/').pop().replace('.html', ''); 1120 } 1121 1122 const currentScript = document.currentScript; 1123 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 1124 const box = postWrapper.querySelector('.reaction-box'); 1125 1126 // Primeiro procura por um link que termina em .html 1127 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 1128 1129 // Se não achar, aceita o primeiro link que houver 1130 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 1131 1132 let finalSlug = null; 1133 /* 1134 if (postLinkEl) { 1135 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 1136 } 1137 1138 // Como último recurso, pega o link da página corrente 1139 if (!finalSlug) { 1140 finalSlug = extractSlug(window.location.pathname) || 'index'; 1141 } 1142 */ 1143 1144 finalSlug = extractSlug("slop-debian-vai-votar-sobre-passar-a-recusar-codigos-gerados-por-ia"); 1145 1146 if (finalSlug && box) { 1147 box.setAttribute('data-slug', finalSlug); 1148 1149 // garante que exista o contexto da janela global 1150 if (!window.ReactionComponents) { 1151 window.ReactionComponents = {}; 1152 } 1153 window.ReactionComponents[finalSlug] = box; 1154 } 1155 })(); 1156 </script>
1156 1157 </div> 1158 1159 1160 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/slop-debian-vai-votar-sobre-passar-a-recusar-codigos-gerados-por-ia.html#disqus_thread">Comentar</a> | 1161 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/slop-debian-vai-votar-sobre-passar-a-recusar-codigos-gerados-por-ia.html">Link para compartilhar</a><br> 1162 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 1163 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 27/07/2026 1164 </p> 1165 </article> 1166 <article class="post" data-post-date="27/07/2026"> 1167 <h2><a href="2026/01/ubuntu-planeja-se-livrar-do-arquivo-etcdebianversion.html" rel="bookmark">Ubuntu planeja se livrar do arquivo /etc/debian_version</a></h2> 1168 1169 <div class="entry"> 1170 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distribuicoes.html">distribuicoes</a> 1171 <div class="entry-content"> 1172 <p>O projeto Ubuntu tem <a href="https://bugs.launchpad.net/ubuntu/+source/base-files/+bug/19353">uma pendência mapeada desde 2005</a> para deixar de distribuir o arquivo /etc/debian_version, que é recebido do Debian que fornece os pacotes e, na prática, apenas indica a versão de desenvolvimento do Debian Sid da qual os pacotes chegaram.</p> 1173<p><figure><br /> 1174 <img alt="Transição do logo do Debian para o do Ubuntu" src="https://static.efetividade.net/img/debian-vs-ubuntu-44662.jpg"><br /> 1175</figure></p> 1176<p>O grande problema prático de manter esse artefato histórico no /etc é que, embora esse arquivo não seja indicado como fonte para identificar qual o nome e versão da distribuição que está em uso, há softwares e ferramentas que o usam assim, e acabam trabalhando com informações imprecisas ou mesmo erradas.</p> 1177<p>Agora, 21 anos depois dessa percepção, o desenvolvedor Benjamin Drung <a href="https://lists.ubuntu.com/archives/ubuntu-devel/2026-July/043633.html">planeja resolver a questão</a> definitivamente, por meio da remoção.</p> 1178<p>Vale lembrar: a fonte boa para obter as informações sobre distribuição e versão é o arquivo /etc/os-release, ou alternativamente o comando 'lsb_release -a'.</p> 1179<p>Olhei no servidor mais próximo rodando Ubuntu por aqui, que está rodando um LTS do Ubuntu 22.04, e seu /etc/debian_version indica 'bookworm/sid' (corretamente, mas também erroneamente).</p> 1180<p>Referência: <a href="https://www.phoronix.com/news/Ubuntu-Drop-Debian-Version">Ubuntu Linux Looking To Get Rid Of /etc/debian_version Historical Artifact - Phoronix</a></p> 1181<p><!-- #remaxe blog: brlinux --></p> 1182 1183 </div> 1184 </div> 1185 1186 <p class="postmetadata"> 1187 <div class="reaction-container"> 1188 <center><div class="reaction-box"> 1189 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 1190 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 1191 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 1192 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 1193 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 1194 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 1195 </div></center> 1196 1197 1198
1198<script> 1199 (function() { 1200 // retorna um slug a partir do link (href) do post 1201 function extractSlug(path) { 1202 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 1203 return match ? match[1] : path.split('/').pop().replace('.html', ''); 1204 } 1205 1206 const currentScript = document.currentScript; 1207 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 1208 const box = postWrapper.querySelector('.reaction-box'); 1209 1210 // Primeiro procura por um link que termina em .html 1211 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 1212 1213 // Se não achar, aceita o primeiro link que houver 1214 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 1215 1216 let finalSlug = null; 1217 /* 1218 if (postLinkEl) { 1219 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 1220 } 1221 1222 // Como último recurso, pega o link da página corrente 1223 if (!finalSlug) { 1224 finalSlug = extractSlug(window.location.pathname) || 'index'; 1225 } 1226 */ 1227 1228 finalSlug = extractSlug("ubuntu-planeja-se-livrar-do-arquivo-etcdebianversion"); 1229 1230 if (finalSlug && box) { 1231 box.setAttribute('data-slug', finalSlug); 1232 1233 // garante que exista o contexto da janela global 1234 if (!window.ReactionComponents) { 1235 window.ReactionComponents = {}; 1236 } 1237 window.ReactionComponents[finalSlug] = box; 1238 } 1239 })(); 1240 </script>
1240 1241 </div> 1242 1243 1244 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/ubuntu-planeja-se-livrar-do-arquivo-etcdebianversion.html#disqus_thread">Comentar</a> | 1245 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/ubuntu-planeja-se-livrar-do-arquivo-etcdebianversion.html">Link para compartilhar</a><br> 1246 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 1247 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 27/07/2026 1248 </p> 1249 </article> 1250 <article class="post" data-post-date="27/07/2026"> 1251 <h2><a href="2026/01/mainstream-os-distribuicao-arch-hyprland-com-cara-de-macos.html" rel="bookmark">Mainstream OS: distribuição Arch + Hyprland com cara de MacOS</a></h2> 1252 1253 <div class="entry"> 1254 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Finance/price-tag-3-fill.svg"> <a href="https://br-linux.org/tag-distribuicoes.html">distribuicoes</a> 1255 <div class="entry-content"> 1256 <p> 1257<figure><br /> 1258 <img alt="Desktop do Manistream OS" src="https://static.efetividade.net/img/Main-Desktop-UI-webp-800-55946.jpg"><br /> 1259</figure> </p> 1260<div class=userpost> 1261<p><cite>Enviado por Marcelo Teixeira (lixoatomicoθprotonmail⸱com)</cite></p> 1262<div class=userpostbody>Mais uma distribuição com Arch+Hyprland? Acho que não. LindÃssima! Mas... Pesada...<br /> 1263https://mainstreamos.org/</p> 1264<p>âMainstream OS â Arch, acessÃvel. Hyprland, em casa. - Arch sob o capô, Hyprland na superfÃcie e o polimento do macOS na parte superior - um desktop aberto, que parece perfeito, seja seu primeiro Linux ou o décimo. Nada precisa de terminal; nada não pode ser desfeito.â 1265</p></div> 1266<div class=userlink><a href="https://mainstreamos.org/">Referência: mainstreamos.org</a></div> 1267</div> 1268<p><!-- #remaxe blog: brlinux --></p> 1269 1270 </div> 1271 </div> 1272 1273 <p class="postmetadata"> 1274 <div class="reaction-container"> 1275 <center><div class="reaction-box"> 1276 <button class="react-btn" data-type="thumbsUp">ðð» <span class="count-thumbsUp">0</span></button> 1277 <button class="react-btn" data-type="laugh">𤣠<span class="count-laugh">0</span></button> 1278 <button class="react-btn" data-type="heart">𥰠<span class="count-heart">0</span></button> 1279 <button class="react-btn" data-type="shocked">ð® <span class="count-shocked">0</span></button> 1280 <button class="react-btn" data-type="angry">ð¤ <span class="count-angry">0</span></button> 1281 <button class="react-btn" data-type="thumbsDown">ðð» <span class="count-thumbsDown">0</span></button> 1282 </div></center> 1283 1284 1285
1285<script> 1286 (function() { 1287 // retorna um slug a partir do link (href) do post 1288 function extractSlug(path) { 1289 const match = path.match(/\/([^/]+)\.html(?:[?#]|$)/); 1290 return match ? match[1] : path.split('/').pop().replace('.html', ''); 1291 } 1292 1293 const currentScript = document.currentScript; 1294 const postWrapper = currentScript.closest('.post-preview') || currentScript.parentElement; 1295 const box = postWrapper.querySelector('.reaction-box'); 1296 1297 // Primeiro procura por um link que termina em .html 1298 let postLinkEl = postWrapper.querySelector('a[href*=".html"]'); 1299 1300 // Se não achar, aceita o primeiro link que houver 1301 if (!postLinkEl) postLinkEl = postWrapper.querySelector('a'); 1302 1303 let finalSlug = null; 1304 /* 1305 if (postLinkEl) { 1306 finalSlug = extractSlug(postLinkEl.getAttribute('href')); 1307 } 1308 1309 // Como último recurso, pega o link da página corrente 1310 if (!finalSlug) { 1311 finalSlug = extractSlug(window.location.pathname) || 'index'; 1312 } 1313 */ 1314 1315 finalSlug = extractSlug("mainstream-os-distribuicao-arch-hyprland-com-cara-de-macos"); 1316 1317 if (finalSlug && box) { 1318 box.setAttribute('data-slug', finalSlug); 1319 1320 // garante que exista o contexto da janela global 1321 if (!window.ReactionComponents) { 1322 window.ReactionComponents = {}; 1323 } 1324 window.ReactionComponents[finalSlug] = box; 1325 } 1326 })(); 1327 </script>
1327 1328 </div> 1329 1330 1331 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Communication/chat-4-fill.svg"> <a class="share-comments" href="2026/01/mainstream-os-distribuicao-arch-hyprland-com-cara-de-macos.html#disqus_thread">Comentar</a> | 1332 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/System/share-fill.svg"> <a target="_blank" href="https://br-linux.org/2026/01/mainstream-os-distribuicao-arch-hyprland-com-cara-de-macos.html">Link para compartilhar</a><br> 1333 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/User%20&%20Faces/account-box-fill.svg"> Por <a href="https://augustocampos.net/">Augusto Campos</a> | 1334 <img class="inline-svg" src="/axethemes/brlinux-ng/css/icons/Business/calendar-check-fill.svg"> 27/07/2026 1335 </p> 1336 </article> <span class="next"><a href="https://br-linux.org/index-2.html" rel="next">← Mais antigos</a></span> 1337 <p style="clear:both;"> </p> 1338 1339 </div> 1340 <aside id="sidebar" role="complementary"> 1341 <div class="sidebar-widgets"> 1342 1343 <section class="widget recent-comments"> 1344 <div id="recentcomments" class="dsq-widget"> 1345 <li><h2>Comentários dos leitores</h2> 1346 <div id="recentcomments" class="dsq-widget">
1346<script type="text/javascript" src="https://brlinux.disqus.com/recent_comments_widget.js?num_items=6&hide_avatars=0&avatar_size=32&excerpt_length=200"> </script>
1346</div> 1347 </li><li></li> 1348 </div> 1349 </section> 1350 1351 <section class="widget site-feeds"> 1352 <h2>Feeds e perfis</h2> 1353 <ul class="feeds-list"> 1354 <li><a href="https://br-linux.org/feed.xml" class="feed-rss">Feed RSS</a></li> 1355 <li><a href="https://br-linux.org/archive.html" class="feed-archive">Histórico 2002-2014</a></li> 1356 <li><a href="https://arram.senta-la.cloud/@autobrain" title="Perfil no Fediverso" class="profile-mastodon" rel="me">@autobrain</a></li> 1357 <li><a href="https://augustocampos.net/axe" class="site-axe">Axe CMS</a></li> 1358 <!-- 1359 <li><a href="https://instagram.com/brlinuxorg" class="profile-instagram">@brlinuxorg</a></li> 1360 <li><a href="https://linkedin.com/in/augustocc" class="profile-linkedin">LinkedIn/augustocc</a></li> 1361 <li><a href="https://augustocampos.net" class="site-home">Augusto Campos (Home)</a></li> 1362 --> 1363 <li><a href="https://efetividade.net" class="site-efetividade">Efetividade.net</a></li> 1364 <li><a href="https://trilux.org" title="Blog pessoal" class="site-trilux">Trilux</a></li> 1365 <li><a href="https://twitter.com/brlinuxblog" class="profile-twitter">@brlinuxblog</a></li> 1366 <li><a href="https://twitter.com/augustocc" class="profile-twitter">@augustocc</a></li> 1367 </ul> 1368 </section> 1369 1370 <section class="widget site-search"> 1371 <form method="get" action="https://www.google.com.br/custom" target="_top" role="search"> 1372 <input type="hidden" name="domains" value="br-linux.org"> 1373 <input type="hidden" name="client" value="pub-0343532486559933"> 1374 <input type="hidden" name="forid" value="1"> 1375 <input type="hidden" name="channel" value="0242774292"> 1376 <input type="hidden" name="ie" value="UTF-8"> 1377 <input type="hidden" name="oe" value="UTF-8"> 1378 <input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1"> 1379 <input type="hidden" name="hl" value="pt"> 1380 <input type="hidden" name="sitesearch" value="br-linux.org"> 1381 1382 <label for="sbi" class="sr-only">Digite os termos da sua pesquisa</label> 1383 <input type="text" name="q" maxlength="255" value="" id="sbi" placeholder="Pesquisar no BR-Linux..."> 1384 <input type="submit" name="sa" value="Pesquisar"> 1385 </form> 1386 </section> 1387 1388 <section class="widget site-sponsorship"> 1389 <h2>BR-Linux apoia:</h2> 1390 <div class="banner-container"> 1391 <a href="https://pyladies-floripa.vercel.app" target="_blank" rel="noopener"> 1392 <img alt="PyLadies Floripa" src="https://static.efetividade.net/img/pyladies-760456-png-168-72612.jpg"> 1393 </a> 1394 </div> 1395 </section> 1396 1397 <section class="widget site-licensing"> 1398 <h2>Licenciamento</h2> 1399 <p>Saiba mais <a href="https://br-linux.org/sobre">sobre o BR-Linux</a>.</p> 1400 <p>O conteúdo textual original desta página está disponÃvel sob a licença GNU FDL 1.2.</p> 1401 <p>Veja os <a href="https://br-linux.org/termos">Termos de Uso</a> para saber os detalhes sobre licenciamento, polÃticas com relação ao conteúdo enviado pelos leitores (incluindo comentários), moderação pública, privacidade e aspectos legais.</p> 1402 </section> 1403 1404 </div> 1405 </aside> 1406 </div> <footer id="footer" class="site-footer" role="contentinfo"> 1407 <div class="footer-columns-grid"> 1408 1409 <div class="footer-column branding-summary"> 1410 <h3>BR-Linux.org</h3> 1411 <p>Linux® levado a sério desde 1996. NotÃcias, dicas e tutoriais em bom português sobre Linux e Código Aberto. "A página sobre software livre mais procurada no Brasil", segundo a Revista Isto Ã.</p> 1412 </div> 1413 1414 <div class="footer-column links-group"> 1415 <h3>Expediente</h3> 1416 <ul> 1417 <li><a href="https://br-linux.org/sobre">Sobre o BR-Linux</a></li> 1418 <li><a href="https://br-linux.org/indicar">Enviar notÃcia ou release</a></li> 1419 <li><a href="https://br-linux.org/contato">Contato</a></li> 1420 <li><a href="https://br-linux.org/termos">Termos de uso</a></li> 1421 <li><a href="https://br-linux.org/faq">FAQ</a></li> 1422 <li><a href="https://br-linux.org/linux/node/feed">RSS</a></li> 1423 <li><a href="https://br-linux.org/anunciar">Anunciar no BR-Linux</a></li> 1424 </ul>
1425 </div> 1426 1427 <div class="footer-column links-group"> 1428 <h3>Visite também</h3> 1429 <ul> 1430 <li><a href="https://br-linux.org/redir/redir-news-vol.php" target="_parent">VivaOLinux</a></li> 1431 <li><a href="https://br-linux.org/comunidade">Sites da comunidade</a></li> 1432 </ul> 1433 <h3 class="nested-header">Ajuda</h3> 1434 <ul> 1435 <li><a href="https://br-linux.org/linux/node/372">Publicar seu texto</a></li> 1436 </ul> 1437 </div> 1438 1439 </div> 1440 1441 <div class="footer-legal-attributions"> 1442 <p>© <a href="https://augustocampos.net/">Augusto Campos</a>. Conteúdo original disponÃvel sob a licença livre GNU FDL 1.2.</p> 1443 <p class="trademark-notice">Powered by <a href="https://augustocampos.net/axe">Axe</a>. <strong>Linux</strong> ® é marca registrada de Linus Torvalds. Os direitos autorais de todas as ilustrações pertencem aos respectivos autores, reproduzidas na intenção de atender ao disposto no art. 46 da Lei 9.610. Se alguma delas infringe direito seu, entre em <a href="https://br-linux.org/contato">contato</a> para remoção imediata.</p> 1444 </div> 1445 </footer> 1446 1447 </div>
1447<script id="dsq-count-scr" src="//brlinux.disqus.com/count.js" async></script>
1447 1448
1449<script> 1450 // suporte aos reacts - 6.6.2026 1451 const API_ENDPOINT = 'https://br-linux.org/reactions/reactions.php'; 1452 (function() { 1453 const initEngine = () => { 1454 const components = window.ReactionComponents || {}; 1455 if (Object.keys(components).length === 0) { 1456 console.warn("[Reactions] Engine started, but window.ReactionComponents is empty."); 1457 return; 1458 } 1459 1460 Object.keys(components).forEach(slug => { 1461 const box = components[slug]; 1462 const buttons = box.querySelectorAll('.react-btn'); 1463 const localSavedReaction = localStorage.getItem(`react_${slug}`); 1464 1465 async function fetchReactions() { 1466 try { 1467 const response = await fetch(`${API_ENDPOINT}?slug=${encodeURIComponent(slug)}`); 1468 if (response.ok) { 1469 const data = await response.json(); 1470 if (data.userReaction) { 1471 localStorage.setItem(`react_${slug}`, data.userReaction); 1472 } else { 1473 localStorage.removeItem(`react_${slug}`); 1474 } 1475 updateBoxUI(data.counts, data.userReaction || localSavedReaction); 1476 } 1477 } catch (err) { 1478 console.error(`Failed to load reactions for ${slug}:`, err); 1479 if (localSavedReaction) updateBoxUI({}, localSavedReaction); 1480 } 1481 } 1482 1483 async function sendReaction(type) { 1484 buttons.forEach(btn => btn.disabled = true); 1485 try { 1486 const response = await fetch(`${API_ENDPOINT}?slug=${encodeURIComponent(slug)}`, { 1487 method: 'POST', 1488 headers: { 'Content-Type': 'application/json' }, 1489 body: JSON.stringify({ reaction: type }) 1490 }); 1491 if (response.ok) { 1492 const data = await response.json(); 1493 if (data.userReaction) { 1494 localStorage.setItem(`react_${slug}`, data.userReaction); 1495 } else { 1496 localStorage.removeItem(`react_${slug}`); 1497 } 1498 updateBoxUI(data.counts, data.userReaction); 1499 } 1500 } catch (err) { 1501 console.error(`Failed to save reaction for ${slug}:`, err); 1502 } finally { 1503 buttons.forEach(btn => btn.disabled = false); 1504 } 1505 } 1506 1507 function updateBoxUI(counts, activeType) { 1508 buttons.forEach(button => { 1509 const type = button.dataset.type; 1510 const countEl = box.querySelector(`.count-${type}`); 1511 if (countEl && counts && counts[type] !== undefined) { 1512 countEl.innerText = counts[type]; 1513 } 1514 if (activeType) { 1515 if (type === activeType) button.classList.add('active'); 1516 else button.classList.remove('active'); 1517 } else { 1518 button.classList.remove('active'); 1519 } 1520 }); 1521 } 1522 1523 buttons.forEach(button => { 1524 button.addEventListener('click', () => sendReaction(button.dataset.type)); 1525 }); 1526 1527 fetchReactions(); 1528 }); 1529 }; 1530 1531 if (document.readyState === "loading") { 1532 document.addEventListener("DOMContentLoaded", initEngine); 1533 } else { 1534 initEngine(); 1535 } 1536 })(); 1537 1538 1539 function hideOldReactions() { 1540 const MS_PER_DAY = 24 * 60 * 60 * 1000; 1541 1542 const today = new Date(); 1543 today.setHours(0, 0, 0, 0); 1544 1545 const posts = document.querySelectorAll('.post'); 1546 1547 posts.forEach(post => { 1548 const dateString = post.getAttribute('data-post-date'); // e.g., "6/06/2026" 1549 if (!dateString) return; 1550 1551 const parts = dateString.split('/'); 1552 if (parts.length !== 3) return; 1553 1554 const day = parseInt(parts[0], 10);
1555 const month = parseInt(parts[1], 10) - 1; 1556 const year = parseInt(parts[2], 10); 1557 const postDate = new Date(year, month, day); 1558 const ageInDays = (today - postDate) / MS_PER_DAY; 1559 if (ageInDays > 8) { 1560 const reactionBox = post.querySelector('.reaction-box'); 1561 if (reactionBox) { 1562 reactionBox.style.display = 'none'; 1563 } 1564 } 1565 }); 1566} 1567document.addEventListener('DOMContentLoaded', hideOldReactions); 1568 1569</script>
1569 1570 1571</body> 1572</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.