雷在他稱為“地球”的世界裏種下了他編寫的一個小玩意兒——80字節的程序代碼,並把它放入他的虛擬計算機的內存中。這個小家夥先是找到一塊80字節大小的空白內存空間,然後用一份自己的複製品占據這塊地盤,從而實現了自我複製。不消幾分鍾,內存裏就滿是80的複製品了。

雷增加了兩個重要功能,將這台施樂複印機般的複製機改造成一台進化機:他的程序在複製中偶爾會搞亂幾位代碼,他還賦予這些“生物”中的劊子手以優先權。簡言之,他引入了變異和死亡。

計算機科學家告訴過他,如果隨意改變計算機代碼(他的所有生物實際上都是代碼),改變後的程序可能無法正常運行,甚而使計算機崩潰。他們認為通過向編碼中隨機引入漏洞來獲得可運行的程序的概率太低了,他的方案無異於浪費時間。雷其實也知道,維持計算機運行所需的完美實在是太弱不禁風了——漏洞會殺死進程。不過,由於他的造物程序在他的影子計算機中運行,一旦變異產生一個嚴重“畸形”的東西,他的劊子手程序——他將其命名為“收割機”——就會將它殺死,而他的“地球”的其餘部分則繼續運轉。“地球”實際上是找出不能複製的漏洞程序,將其從虛擬計算機中拖將出去。

然而“收割機”會放過極少數有效變種,也就是說,那些碰巧形成一個真正的替代程序的變種。這些合法的變種能夠複製並產生其他變種。如果你像雷那樣將“地球”運行10億個計算機周期,在這10億次的機會中,將出現數量驚人的隨機產生的東西。為了讓係統更有活力,雷還為造出來的小東西們打上了年齡戳記,這樣一來,老一些的家夥就會死亡。“收割機既殺死最老的家夥,也殺死最搗蛋的家夥。”雷笑著說。

在“地球”的首輪運行中,隨機變異、死亡和自然選擇都起了作用。沒幾分鍾,雷就見證了一個生態係統的誕生——這個係統由那些新的生物組成,它們為搶奪計算機周期而競爭。競爭獎勵個頭小的家夥,因為它們需要的周期更少,而殘酷的達爾文進化論淘汰的則是貪婪的消耗者、體弱多病的物種和老家夥。物種79(比80少一個字節)是幸運的。它的工作卓有成效,很快就超過了80。

雷還發現了非常奇怪的東西——一種隻有45個字節的變種。它的代碼效率極高,數量上也超過了所有其他變種。“這個係統自我優化的速度之快令我震驚,”雷回憶說,“係統中的存活者有著越來越短的基因,我可以用圖把這個速度描繪出來。”

在對45的代碼做進一步考察時,雷驚奇地發現它是一隻寄生蟲。它隻包含了生存所需的代碼。為了繁殖,它“借用”了80的繁殖代碼來複製自己。隻要周圍有足夠的80宿主,45就會興盛起來。但是,如果在有限的範圍內45太多了,就不會有足夠的80提供複製源。隨著80的減少,45也減少了。這對舞伴跳著共同進化的探戈,進進退退,就像北部森林中的狐狸和兔子一樣。

“所有成功的係統都會吸引寄生蟲,這似乎是生命的普遍屬性。”雷提醒我說。在自然界寄生蟲如此常見,以至於宿主很快就共同進化出針對它們的免疫力。寄生蟲隨之進化出騙過那種免疫力的策略。結果宿主再共同進化出抵製它們的防禦能力。實際上這些行動並不是交替出現的,而是兩股持續相互作用的力量。

雷學會了用寄生蟲在“地球”中進行生態實驗。他把79裝到他的“培養液”裏,因為他覺得79可能對寄生蟲45免疫。的確如此。不過隨著79的興旺,第二種能夠捕食它們的寄生蟲進化出來。這一種有51字節長。當雷為它的基因排序時,他發現,45之所以能變成51,正是由一個“基因事件”所引起的:“7個出處已無從考究的指令取代了45中間段某處的一個指令,”把一個喪失能力的寄生蟲變成了強有力的新物種。但這還不算完——一個對51具有免疫力的新物種進化了出來,而這樣的過程還在繼續。

在運行了很長時間的“培養液”中,雷發現了以其他寄生蟲為宿主的超寄生蟲:“超寄生蟲就像是從你家的電線上偷電的鄰居。他們用你的電,你付電費,而你還蒙在鼓裏。”在“地球”裏,像45這樣的有機體發現自己無需“攜帶”大量代碼來複製自己,因為它們周圍有足夠的代碼。雷俏皮地說:“這就像我們利用其他動物的氨基酸一樣(在我們吃它們的時候)。”在進一步檢查中,雷發現超-超寄生蟲興旺起來,寄生升級到了第三重。他發現了“社交騙子”——這種生物利用兩個合作的超寄生蟲的代碼(“合作”的超寄生蟲彼此還相互偷竊!)。社會騙子需要相當發達的生態環境。至於超-超-超寄生蟲,雖然還沒看到,不過也許已經有了。在他的世界裏,這種不勞而獲的遊戲也許永無止境。

15.2 你力所不逮的,進化能行

雷所發現的“生物”是人類程序員無法編寫出來的。

“我從編寫80字節的東西開始,”雷回憶說,“因為那是我能拿出來的最佳設計了。我猜想或許進化能把它降到75字節左右,於是就讓程序運行了一整夜。結果第二天早上就出現了一個新東西——不是寄生蟲,而是某種能完全自我複製的東西——它隻有22字節!令我大惑不解的是,在沒有像寄生蟲那樣盜用別人指令的情況下,一個電腦病毒是怎樣僅通過22個指令就做到自行複製的呢?為了和他人分享這個新發現,我把它的基本算法發到網上。麻省理工學院一位計算機專業的學生看到了我的解釋,但不知怎麼卻沒有得到病毒22的代碼。他試圖手工重新創造它,但是他的最好成績也需要31條指令。當他得知我是在睡覺時得到22條指令的時候,他沮喪極了。”