Nosso velho amigo A. K. Dewdney apresentou pela primeira vez ao mundo o Guerra de Núcleo em um série de artigos da Scientific American com início em 1984. (As digitalizações de página inteira dos artigos, incluindo as ilustrações, estão também disponíveis.)
O Core War foi inspirado em uma história que ouvi há alguns anos sobre um programador malicioso de um grande laboratório de pesquisa corporativa que chamarei de X. O programador escreveu um programa em linguagem assembly chamado Creeper que se duplicava toda vez que era executado. Ele também podia se espalhar de um computador para outro na rede da corporação X. O programa não tinha outra função além de se perpetuar. Em pouco tempo, havia tantas cópias do Creeper que programas e dados mais úteis estavam sendo excluídos. A infestação crescente só foi controlada quando alguém pensou em combater fogo com fogo. Um segundo programa de autoduplicação chamado Reaper foi escrito. Seu objetivo era destruir cópias do Creeper até que não encontrasse mais nenhuma e, em seguida, destruir a si mesmo. O Reaper fez seu trabalho, e logo as coisas voltaram ao normal no laboratório X.
(A história do Creeper e do Reaper parece se basear em uma combinação de dois programas reais. Um programa era o um jogo de computador chamado Darwin, inventado por M. Douglas McIlroy, da AT&T Bell Laboratories. O outro era chamado Worm e foi escrito por John F. Shoch, do Xerox Palo Alto Research Center. Ambos os programas têm alguns anos, o que dá tempo suficiente para que os rumores floresçam).
O Core War, surpreendentemente, ainda existe. O hub atual parece estar em corewar.co.uk. Lá, o senhor pode baixar simuladores para vários sistemas operacionais. Veja como funciona uma batalha do Core War:
O Core War tem quatro componentes principais: uma matriz de memória de 8.000 endereços, a linguagem de montagem Redcode, um programa executivo chamado MARS (acrônimo de Memory Array Redcode Simulator) e o conjunto de programas de batalha em disputa. Dois programas de batalha são inseridos na matriz de memória em posições escolhidas aleatoriamente; nenhum dos programas sabe onde o outro está. O MARS executa os programas em uma versão simples de compartilhamento de tempo, uma técnica para alocar os recursos de um computador entre vários usuários. Os dois programas se revezam: uma única instrução do primeiro programa é executada, depois uma única instrução do segundo e assim por diante.
O que um programa de batalha faz durante os ciclos de execução atribuídos a ele depende inteiramente do programador. O objetivo, é claro, é destruir o outro programa arruinando suas instruções. Uma estratégia defensiva também é possível: um programa pode se comprometer a reparar qualquer dano que tenha recebido ou a sair do caminho quando for atacado. A batalha termina quando o MARS chega a uma instrução em um dos programas que não pode ser executada. O programa com a instrução defeituosa, que presumivelmente é uma vítima da guerra, é declarado perdedor.
Vamos ver isso em ação usando um dos simuladores. O que o senhor está assistindo aqui é um torneio round-robin entre os Imp [yellow], Ratos [blue], Anão [white]e Piper [green] programas.
O vencedor é Piper [green], com 2 vitórias, 0 derrotas e 1 empate.
Esses programas são escritos em um dialeto semelhante ao assembly, conhecido como Redcode. Aqui está o código-fonte do Midget:
;redcode ;name Midget ;author Chip Wendell ;strategy stone (bomber) ;history Third place at the 1986 ICWS tournament Bomb dat #0, #-980 Spacer equ 28 Start mov Bomb, @Bomb sub #Spacer,Bomb jmp Start, #0 end Start
O Conjunto de instruções Redcode é deliberadamente simples. Há duas variantes, o ICWS-88 com 10 instruções e 4 modos de endereçamento e o ICWS-94 com 19 instruções e 8 modos de endereçamento.
DAT |
dados |
DJN |
decremento e salto se não for zero |
MOV |
mover / copiar |
SPL |
dividir |
ADD |
adicionar |
CMP |
comparar |
SUB |
subtrair |
SEQ |
pular se for igual |
MUL |
multiplicar |
SNE |
pular se não for igual |
DIV |
dividir |
SLT |
pular se for menor que |
MOD |
módulo |
LDP |
carregar do espaço privado |
JMP |
pular |
STP |
salvar em espaço privado |
JMZ |
pular se for zero |
NOP |
nenhuma operação |
JMN |
pular se não for zero |
Ele é estruturado de forma que não exista um “aplicativo matador”; três estratégias amplas são possíveis, cada uma com seus próprios pontos fortes e fracos.
- Artigo ou Replicator
Tente encher o núcleo com cópias de seu programa, para que o senhor seja mais difícil de matar.
- Rock ou Bomber
Ataque escrevendo instruções ilegais em todo o núcleo, mas não na memória de seu próprio programa.
- Tesoura ou Scanner
Tente identificar programas inimigos escondidos no núcleo e, em seguida, direcione as gravações para eliminá-los.
É claro que combinações das estratégias acima também são possíveis. Como o senhor pode imaginar, após 25 anos de evolução no campo de batalha, alguns programas modernos do Core War já são bastante barrocos.
Não é particularmente útil, mas é uma programação jogoafinal de contas. É também uma parte fascinante da história da ciência da computação. Se o senhor estiver interessado em participar do venerável esporte do Core War, ele ainda está bem vivo. O 10 principais links para iniciantes em Core War é um ótimo lugar para começar.