O código fonte de ambos o Windows XP Service Pack 1 (NT 5.1) e do Windows Server 2003 (NT 5.2) foram recentemente disponibilizados na Internet. Eu assisti a esse acontecimento e acompanhei com entusiasmo os esforços da comunidade para compilar e gerar uma instalação utilizável. Muito progresso aconteceu nos meses subsequentes, com arranjos efetuados ao processo de build e até alguns dos componentes em falta foram reconstruidos. Infelizmente, parece que o entusiasmo inicial foi-se dissipando, e já praticamente ninguém trabalha neste projeto (que eu saiba). Felizmente para nós, horas de trabalho suficientes foram despejadas para criar uma versão do Windows XP baseada no kernel do Windows Server 2003. Só para recordar, a Microsoft só utilizou o kernel do Windows NT 5.2 para lançar versões do Windows de servidor. A única versão lançada para os consumidores foi a versão x64 do Windows XP Profissional em 2005. De notar que este artigo é de caráter meramente lúdico. Esta versão compilada do Windows XP é baseada apenas na versão original do kernel NT 5.2 sem qualquer tipo de Service Packs ou atualizações (e estes nem podem ser instalados). Nem vou mencionar a questão da legalidade de manusear código fonte confidencial da Microsoft.
Toda a informação aqui disponibilizada tem por base esta excelente página: https://rentry.co/centralizer-info
Material necessário
- Máquina virtual com Windows XP ou Windows Server 2003 – já testei com versões mais recentes do Windows, mas parece que nunca chega a compilar tudo com sucesso. Recomendo utilizar o VMware, visto que o VMware Tools permite copiar ficheiros entre o host e o guest com facilidade.
- Partição secundária com pelo menos 50GB de espaço – tem de ter uma letra de unidade diferente da principal (por exemplo, E:).
- 7-Zip – para facilmente lidar com os ficheiros comprimidos.
- Notepad++ v7.9.2 – a última versão compatível com o Windows XP. Necessária para efetuar as modificações no código fonte necessárias mais facilmente.
- nt5src.7z – o ficheiro original com o código fonte dos dois SO.
- win2003_prepatched_v10a.zip – uma compilação de todos os arranjos que a comunidade desenvolveu para poder compilar sem erros.
- win2003_x86-missing-binaries_v2.7z – ficheiros para acrescentar após uma compilação sucedida (como os ficheiros advêm de código de terceiros licenciado para ser usado pela Microsoft, não foram incluídos no código fonte).
- srv03rtm.certs.7z – certificados atualizados para assinar todos os ficheiros gerados (necessário para gerar uma imagem de disco utilizável);
- winlogon_patched.7z – código fonte gerado pela comunidade do WinLogon, programa responsável pelo início de sessão e proteção de pirataria (obviamente não incluída aqui)
- processorXP_win2003_update.7z – código fonte de drivers de processador criados pela comunidade. Extremamente semelhantes aos ficheiros contidos na versão lançada oficialmente pela Microsoft em termos de funcionalidade.
- win2003_pidgenXP_cracked.zip – modifica o código fonte do ficheiro “pidgen.dll” para permitir a introdução de qualquer chave para ativar o produto. Normalmente, seria utilizada a versão deste ficheiro que só permite introduzir chaves do Windows Server 2003 Enterprise, versão de retalho.
- win2003_themeadds_v1.7z – contém código fonte gerado pela comunidade com alguns dos temas extra para o Windows XP que foram introduzidos posteriormente com o Media Center Edition e a versão Embedded.
- signtool.exe – apesar de já vir incluída com o código fonte, não suporta os certificados atualizados o que leva a erros nas partes finais deste processo. Esta versão atualizada origina do SDK (Software Development Kit) do Windows 7 SP1.
Caso queiram aceder a todos os ficheiros que mencionei na lista (exceto o código fonte em si e o signtool.exe), basta adicionarem ao URL do blog o seguinte sufixo: /srv03rtm/<nome do ficheiro>
. Penso que assim evito quaisquer problemas legais 😶. Menciono também que os ficheiros srv03rtm.certs.7z e winlogon_patched.7z foram criados por mim com as modificações necessárias para uma compilação com sucesso. É possível replicar estes ficheiros seguindo à risca o tutorial no site que mencionei no início do artigo. Com tudo isto, passemos à parte que interessa.
Para arranjar o signtool.exe podem fazer download do SDK direto da Microsoft. Deixo o link para download direto, pois caso seja removido – uma possibilidade muito real – no mínimo podem usar o web.archive.org para o ir buscar. Após a instalação do SDK, o signtool.exe encontra-se em:
Em sistemas 32 bits: C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe
Em sistemas 64 bits: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe
Passo a passo
Configurem a máquina virtual com o espaço necessário para albergar tanto o SO base como o código fonte. Eu criei uma MV com 140GB de espaço, só para ter aquele espaço de folga. Recomendo no passo inicial de instalação instalar o Windows XP/Server 2003 numa partição de 10GB~20GB e depois configurar o resto no Gestor de Discos.
Na unidade que irá conter o código fonte – denominada a partir deste momento E: – criem a pasta srv03rtm
. Numa outra localização à escolha, descompactem a pasta Win2K3
. Editem o ficheiro x.cmd
contido para descompactar todos os arquivos .cab
em E:\srv03rtm
.
rem goto end
Set BLDNo=3790
Set BLD=Win2K3
extract /y /a /e /l E:\srv03rtm 3790src1.cab
extract /y /a /e /l E:\srv03rtm 3790src2.cab
extract /y /a /e /l E:\srv03rtm 3790src3.cab
extract /y /a /e /l E:\srv03rtm 3790src4.cab
extract /y /a /e /l E:\srv03rtm 3790src5.cab
:end
Este processo deve demorar uns 10 minutos, dependendo do hardware. Um passo extremamente importante antes de metermos a mão na massa: vão às propriedade da pasta E:\srv03rtm
após a descompactação e removam a propriedade “Só de leitura”. Agora basta aplicar todos os patches. Descompactem todos os ficheiros mencionados dentro de E:\srv03rtm
pela ordem indicada, substituindo todos os ficheiros que forem necessários:
- win2003_prepatched_v10a.zip
- srv03rtm.certs.7z
- winlogon_patched.7z
- processorXP_win2003_update.7z
- win2003_pidgenXP_cracked.zip
- win2003_themeadds_v1.7z
Coloquem o signtool.exe na seguinte localização, substituindo o ficheiro lá existente:
E:\srv03rtm\tools\x86
Apesar de não ser necessário, efetuem as seguintes modificações nos ficheiros indicados para corrigir alguns pequenos bugs (o símbolo de menos indica a remover e o símbolo de mais indica a adicionar):
E:\srv03rtm\admin\wmi\wbem\providers\win32provider\providers\systemname.cpp
- Linha 375
- if ( IsWinNT51() )
+ if ( IsWinNT51() || IsWinNT52() )
E:\srv03rtm\windows\core\ntuser\kernel\init.c
- Linha 3103
- if (USER_SHARED_DATA->SystemExpirationDate.QuadPart || gfUnsignedDrivers) {
+ if (0 && (USER_SHARED_DATA->SystemExpirationDate.QuadPart || gfUnsignedDrivers)) {
E:\srv03rtm\tools\postbuildscripts\timebomb.cmd
- Linha 44
-set DAYS=360
+set DAYS=0
No ambiente de trabalho criem dois novos atalhos. No primeiro copiem a seguinte linha para a localização:
%windir%\system32\cmd.exe /k E:\srv03rtm\tools\razzle.cmd free offline
Podem dar o nome que quiserem, mas eu optei por “NT5 Build Env"
. Modifiquem as propriedades do atalho para que no campo “Iniciar em:” tenha o caminho E:\srv03rtm
. Para criar o segundo copiem o primeiro e mudem as propriedades para que no campo “Destino:” tenha:
%windir%\system32\cmd.exe /k E:\srv03rtm\tools\razzle.cmd free offline officialbuild
Podem dar-lhe o nome de “NT5 Build Env Officialbuild”. Abram o primeiro atalho criado, e o sistema de compilação irá imediatamente preparar o computador para o processo todo. Quando a preparação terminar, executem o comando indicado a seguir, fechem a linha de comandos e abram o segundo atalho. A partir deste momento iremos utilizar a janela criada pelo segundo atalho até ao final do processo.
echo %COMPUTERNAME%,primary,%_BuildBranch%,%_BuildArch%,%_BuildType%,ntblus >> tools\BuildMachines.txt
Agora reunimos todas as condições necessárias para compilar tudo. Executem estes dois comandos em ordem:
tools\prebuild.cmd
build /cZP
O processo de compilação é bastante demorado – por volta de 1 hora – portanto esta é uma boa altura para relaxar um bocado ou efetuar outras tarefas no fundo enquanto que as centenas de componentes do Windows vão sendo construídos de raiz. Quaisquer erros que possam aparecer serão registados no ficheiro E:\srv03rtm\build.err
. No final só deverá haver dois erros inconsequentes neste ficheiro:
2>ds\security\licensing\explib\checkstatus.cxx(15) : error C1083: Cannot open include file: 'xutility': No such file or directory
2>LIB : error LNK1181: cannot open input file 'obj\i386\checkstatus.obj'
Hão de reparar que agora temos uma pasta adicional: E:\binaries.x86fre
. Os resultados da compilação são todos guardados nesta.
Como já mencionei, há certos componentes que estão em falta e que terão de ser acrescentados. Estes são provenientes do CD da versão original do Windows Server 2003 e do Windows XP SP1. Abram o win2003_x86-missing-binaries_v2.7z e descompactem a pasta binaries.x86fre
sobre a mesma. Não substituam nenhum ficheiro que já exista na pasta, pois irá substituir a nossa versão compilada pela versão que já existe no CD (queremos ao máximo manter os nossos ficheiros compilados 😉).
Para finalizar, editem o ficheiro E:\srv03rtm\tools\postbuildscripts\pbuild.dat
e comentem as linhas 107 e 245 com um ponto e vírgula no início para que o processo de gerar uma imagem com os símbolos de debug não seja iniciado na pós-compilação, já que este passo irá sempre dar erros devido aos ficheiros provenientes do CD que tivemos de arranjar no parágrafo anterior.
Por último, executem o seguinte comando para gerar os ficheiros de instalação finais:
tools\postbuild.cmd /full /sku:PRO /l:USA
Este processo final irá gerar umas 20 janelas de linhas de comando em simultâneo e consumir todos o poder de processamento disponível na máquina virtual. Ao contrário da compilação, a pós compilação não deve demorar mais do que 20 minutos. Tudo isto deve acabar em erro, mas não será nada de grave. Verifiquem se no ficheiro de registo de erros contido em E:\binaries.x86fre\build_logs\postbuild.err
só tem os seguintes erros:
(capturesourcefilelist.cmd) ERROR: Failed to open E:\srv03rtm\tools\projects.nt for read
(capturesourcefilelist.cmd) ERROR: Failed to open file E:\binaries.x86fre\build_logs\SourceFileLists\SourceFileLists.txt.timestamp for write
(pbuild.cmd) ERROR: Errors encountered at this time, exiting.
Deve existir a seguinte pasta E:\binaries.x86fre\pro
com os ficheiros de instalação gerados. Parabéns! Tens agora a cópia única do Windows XP baseado no kernel NT 5.2. Provavelmente a única cópia não gerada dentro dos escritórios da Microsoft. Para gerar uma imagem ISO, basta executar:
tools\oscdimg.cmd pro
Resultados
Conclusões
Conseguir reunir este conjunto de passos para atingir este resultado final exigiu muita tentativa/erro ao longo de vários dias. No final, temos uma versão do Windows XP baseado no superior kernel do NT 5.2. É possível instalar drivers da altura e correr quaisquer aplicações que não exijam Service Packs mais recentes. Os mais atentos podem ter reparado que no comando de postbuild há um parâmetro para especificar a linguagem. Tentei compilar uma versão em português, mas falhou rapidamente. Assumo que o código fonte só inclua os recursos necessário para o inglês dos Estados Unidos.
E com isto concluo o tutorial. Espero que tenha ajudado outras pessoas nas suas ambições académicas.