-
The Old New Thing (Raymond Chen)
Raymond Chen
21/04/2026 14:00
Olha, fazer `xor` de um registrador com ele mesmo é como usar o Ctrl+Z da programação: simples e eficaz. Mas a pergunta que fica é: será que o `sub` não poderia entrar nessa dança? Afinal, quem não gosta de um pouco de diversidade nas operações? Contudo, `xor` se tornou o queridinho da galera, provavelmente por ser tão limpinho e fácil de entender, o que é sempre um bônus na hora das disputas de código.
-
The Old New Thing (Raymond Chen)
Raymond Chen
12/03/2026 11:00
Uma verdadeira viagem no tempo, essa análise da convenção de chamada x86-32. Para quem já se aventurou em programação de baixo nível, as peculiaridades desse modelo são um lembrete de como o passado ainda molda o presente, mesmo que a maioria de nós prefira abstrações modernas. "Um dos mais estranhos convenções de chamada que você verá" é uma descrição que poderia muito bem se aplicar a algumas reuniões de equipe. Enquanto alguns discutem sobre a versão mais recente do React, não devemos esquecer que esse legado ainda afeta nossos sistemas hoje.
-
Evan Ovadia traz à tona uma verdade dura: "qualquer um tentando criar uma nova linguagem mainstream é completamente insano". A dificuldade em integrar linguagens, especialmente quando se fala de Rust e seu ABI instável, faz você se sentir como se estivesse tentando desinventar a roda. No entanto, com experiências de FFI, podemos transformar essa luta em uma divertida corrida de obstáculos, onde a única saída pode ser... um microserviço. O texto é um bom lembrete de que a interoperação entre linguagens pode ser a verdadeira 'missão impossível' do desenvolvimento.
-
Essa análise sobre propriedade única é um mergulho interessante nas complexidades da gestão de memória que muitos programadores em C deveriam ler. O autor parece estar jogando um xadrez mental, demonstrando que não precisamos sempre de ferramentas pesadas como a coleta de lixo para garantir segurança de memória. Fica a dica: quem já passou pela tortura dos vazamentos de memória sabe que, às vezes, um simples controle de propriedade pode evitar um colapso no programa. Nota para os responsáveis pela documentação: 'The caller takes ownership of the data' é um mantra que deve ser facilmente acessível para prevenir conflitos e desastres.
-
Drew DeVault
07/09/2022 00:00
O texto destaca como a linguagem de programação Hare busca facilitar a escrita de kernels, como o projeto Helios. Os kernels são realmente criaturas complexas, muito mais exigentes do que seu aplicativo de lista de compras. O conceito de passar um "bootinfo" com informações cruciais para o init, em um contexto onde a alocação dinâmica é um quebra-cabeça, é um verdadeiro teste de habilidade para devs. Afinal, quem disse que programar em baixo nível não poderia ser também uma diversão cheia de desafios?
-
Drew DeVault
06/09/2022 21:00
O artigo explora a linguagem de programação Hare e seu objetivo de permitir a criação de kernels, especificamente no projeto Helios. O foco aqui é na complexidade de fornecer informações detalhadas ao processo init, que é crucial para a inicialização do sistema. O autor menciona a necessidade de lidar com múltiplos espaços de endereçamento em um ambiente onde a alocação dinâmica é um verdadeiro tabu. Agora, se você acha que programar no nível do kernel é fácil, é melhor dar uma olhada nesses desafios de gestão de memória antes de escrever seu próximo loop for em Python.
-
Drew DeVault
29/05/2021 21:00
Se você tem um projeto de programação de sistemas na lista de tarefas e tem a coragem de desbravar, essa nova linguagem pode ser sua nova melhor amiga. "XXXX é uma linguagem de programação de sistemas projetada para ser simples e robusta", o que soa bastante promissor para quem deseja algo menos arcano que algumas das opções por aí. E quem não quer um pouco de emoção ao escrever um kernel ou um servidor web? Fica a dica para os aventureiros do código: a biblioteca padrão pode precisar de um empurrãozinho, então bora contribuir.
-
Drew DeVault
26/01/2020 21:00
KnightOS é uma daquelas histórias de amor platônico entre desenvolvedores e hardware restrito. Com apenas 64 KiB de RAM e um sistema totalmente escrito em assembly Z80, é como tentar montar uma máquina do tempo usando apenas peças de Lego. A ideia de usar código auto-modificado para contornar as limitações do armazenamento Flash é engenhosa, mas soa mais como uma operação de espionagem digital do que uma construção convencional. Resumindo, é um exemplo fantástico de como a criatividade pode prosperar em meio a desafios quase impossíveis.
-
Drew DeVault
07/09/2019 21:00
O autor traz um olhar interessante sobre como escolher entre linguagens de programação, enfatizando a importância de ter um arsenal diversificado para resolver problemas. Ele destaca as vantagens e desvantagens de cada linguagem, com um toque de sinceridade que muitos de nós, devs, conhecemos bem. "A melhor maneira é aprender fazendo" é um mantra que parece ter saído diretamente de um código em produção, e realmente vale a pena explorar a utilidade de cada uma, mesmo sem dominar todas. Afinal, escolher a linguagem certa pode ser tão desafiador quanto debugar um código legado de 2005.
-
Phil Oppermann (OS in Rust)
21/10/2018 21:00
Este post vai direto ao ponto ao explicar como configurar o controlador de interrupções programável para gerenciar interrupções de hardware de forma eficiente. Ao invés de ficar checando teclado constantemente, o kernel reage apenas quando necessário - alô, eficiência. A escolha do Intel 8259, mesmo com muito tempo de estrada, mostra que a simplicidade pode ser bem-vinda ao introduzir conceitos mais complexos. E claro, não podemos esquecer do dilema da concorrência, onde o modelo de propriedade do Rust oferece alguma proteção contra os bugs desencadeados pelas interrupções assíncronas. Para quem curte low-level, esse é um prato cheio.
-
Phil Oppermann (OS in Rust)
16/06/2018 21:00
Exceções de CPU são como aquele amigo que fica interrompendo todo mundo na festa para falar sobre o último bug que encontrou. Quando algo dá errado, como uma divisão por zero, é aí que as coisas ficam interessantes. Configurar uma tabela de descritores de interrupção para gerenciar essas exceções é o que dá aquele "up" no controle do nosso kernel. Afinal, quem não gostaria de ter um plano de contingência para evitar um "triple fault" na hora da ação?
-
Phil Oppermann (OS in Rust)
25/02/2018 21:00
O modo de texto VGA é como o console de um jogo antigo, onde cada letra que aparece tem seu próprio 'pixel' na tela, mesmo que na verdade seja só um buffer. O post traz uma abordagem segura para trabalhar com isso no Rust, encapsulando a parte 'perigosa' que pode causar bugs - que, convenhamos, são como zumbis em jogos de survival: você nunca quer ver um. Além disso, a implementação das macros de formatação do Rust torna a tarefa ainda mais amigável para os devs. Se você estava pensando em fazer uma homenagem aos anos 80 enquanto programa, esse é o caminho certo.
-
Drew DeVault
21/02/2018 21:00
Esse segundo artigo da série está, na verdade, um passo importante para quem quer entender como montar um compositor Wayland do zero. O autor menciona que " vamos começar a aceitar conexões de clientes Wayland", mas ainda ficamos com aquela expectativa na parede, aguardando essas interações. Por enquanto, a parte mais empolgante é a inicialização do servidor e a conexão com o display, algo que é rapidamente feito com um pouco de mágica do wlroots. Se você curte desafios low-level e quer trabalhar na criação de interfaces mais modernas, vale a pena acompanhar esses posts.
-
Phil Oppermann (OS in Rust)
01/01/2017 23:00
Esse post é um verdadeiro tratado sobre o conceito de falhas duplas e como lidar com elas. Não é todo dia que você vê alguém se aprofundar na implementação de uma Interrupt Stack Table para evitar falhas tripas – uma situação mais drástica do que um loop infinito em um programa. Como mencionado, "é realmente importante fornecer um manipulador de falha dupla", e isso não pode ser subestimado. Para quem está mergulhando no lado mais baixo nível da programação, é uma leitura imprescindível.
-
Phil Oppermann (OS in Rust)
20/09/2016 21:00
O post traz uma abordagem interessante sobre como lidar com exceções, mais especificamente com a exceção de breakpoint, que é uma armadilha digna de um debug-session. A parte sobre a instrução iretq e os registradores multimídia é um prato cheio para quem curte detalhes low-level, lembrando que, às vezes, o maior inimigo do desenvolvimento é o próprio código não tratado. É sempre bom ter um 'handler' pronto para se safar dessas armadilhas antes de dar aquele 'return'.
-
Drew DeVault
12/04/2016 00:00
Parece que alguém decidiu dar uma balançada no filtro bloom que nasceu superestimulado em C++. O autor apresenta uma abordagem em C que traz algumas vantagens, como "trazer suas próprias funções de hash" e a capacidade de "adicionar tipos de dados arbitrários". Essa escolha por C é interessante, já que, vamos ser sinceros, C é o Tinder das linguagens: seu código pode ficar um pouco mais difícil de entender, mas no final sempre resulta em algo bem básico e poderoso. E se você estava pensando em memórias do std::vector<bool>, pode começar a riscar da lista.
-
Phil Oppermann (OS in Rust)
24/08/2015 21:00
Entrar no modo longo não é só uma questão de glamour 64-bits, mas sim de garantir que o seu kernel rustiqueiro suba sem problemas, a partir do protegido. Como mencionado, "o objetivo é estender e chamar o código Rust de 64 bits". A parte de verificar se o processador suporta as funcionalidades é crucial para evitar surpresas indesejadas — quem ainda não passou pela frustração de um erro esquisito num CPU mais antigo? E que tal essa abordagem de empacotar mensagens de erro em assembly? Simples e elegante, do jeito que a vida de um dev deve ser.
-
Drew DeVault
02/09/2014 00:00
Olha só, quem diria que até calculadoras TI poderiam abrir o jogo e entrar na dança do escalonamento com um kernel Unix-like? O autor destaca que, embora a multitarefa preemptiva possa parecer um conceito nerd, ela é fundamental para que nossos dispositivos não tenham sua CPU ociosa enquanto a gente lê artigos sobre isso. E, claro, o tal do "context switch" é como o switch de personagens nas partidas de Street Fighter: rápido e eficiente, garantindo que todos tenham sua vez no ringue.
-
Drew DeVault
01/09/2014 21:00
Falar sobre escalonamento de processos e multitarefa em um kernel para calculadoras é quase como misturar RPG com uma aula de sistemas operacionais. O autor mergulha na complexidade do multitasking preemptivo com uma referência esperta ao conceito de 'context switch'. Ele resume bem: enquanto sua calculadora pode não rodar Doom, ela ainda consegue gerenciar tarefas com elegância. A abordagem do KnightOS em utilizar um algoritmo de round robin é uma boa escolha para hardware limitado, garantindo que os processos não fiquem esperando como personagens de um jogo esperando a sua vez de atacar.
-
Drew DeVault
24/02/2014 21:00
Criar um sistema operacional para calculadoras TI é como tentar compilar um jogo em um Commodore 64: você precisa de muita habilidade e certeza de que suas referências a asm e z80 estão no ponto. O autor fala que, "se você está confortável com z80 assembly", então você pode se aventurar. A parte mais intrigante? A necessidade de "chaves de assinatura criptográfica" para que seu OS pareça oficialmente da Texas Instruments. Isso só mostra que até em hobbys de hardware, a segurança continua em alta. Mas atenção: será que seu code tá pronto para o ‘jogo’ do desenvolvimento?