PageSourceSearch

https://br-linux.org/

html br-linux.org collected 2026-09-24 08:41:49 UTC 94,884 bytes, 1,572 lines download raw bytes

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 (&#39;hardware enablement&#39;) 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&#36; 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 &#39;lsb_release -a&#39;.</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 &#39;bookworm/sid&#39; (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">&larr; Mais antigos</a></span>
1337		<p style="clear:both;">&nbsp;</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&nbsp;É.</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.