圖片來源@視覺中國

文 | 郭華

01 殺手的誕生

1973年,蘇聯(lián)開始在基輔修建切爾諾貝利核電站,除了滿足烏克蘭的用電需求外,還希望借此向世界展示蘇聯(lián)“和平利用核能”的形象。

差不多同時(shí),加拿大一家造核電站的公司AECL,成立了醫(yī)療部門,開始開發(fā)放射治療儀。

核能有三個(gè)主要的應(yīng)用領(lǐng)域,分別是核武器、核動(dòng)力、核醫(yī)學(xué)。一般來說,后兩者被認(rèn)為是和平的,且越靠后就越和平。

AECL全稱Atomic Energy of Canada Limited,成立于1952年,由加拿大國家控股,其使命就是和平利用核能,所以AECL開發(fā)放射治療儀似乎天經(jīng)地義。不過AECL的醫(yī)療部門并不是從頭開始的,他選擇了和法國的CGR公司合作,然后把CGR的兩款老產(chǎn)品進(jìn)行升級(jí),變成了自己的新產(chǎn)品,分別起名為Therac-6和Therac-20。

這算借腹生子?還是借子生子?都不重要,重要的是孩子已經(jīng)有了。

可能是這兩款產(chǎn)品讓AECL站穩(wěn)了腳跟,也可能是雙方在市場上產(chǎn)生了分歧,總之因?yàn)橐恍┪垂_的原因,AECL和CGR的合作在1981年終止。

這年,切爾諾貝利的第三個(gè)反應(yīng)堆建成開始發(fā)電,按照預(yù)期,六個(gè)反應(yīng)堆都建成后切爾諾貝利將成為蘇聯(lián)最大的核電站。

AECL的腳步也沒有暫停,他在結(jié)束合作的一年后推出了Therac-25。

Therac-25有很多特別之處。

在AECL的產(chǎn)品體系中,后綴表示輻射能量,Therac-6的能量是6MeV,Therac-20是20MeV,Therac-25就是25MeV。所以他的能量是最大的,更大的能量意味著能夠觸達(dá)更深的病灶。而且他更先進(jìn),因?yàn)樗軌蛲耆绍浖M(jìn)行控制——就像2007年的iPhone、2010年的特斯拉一樣,更發(fā)達(dá)的軟件就是先進(jìn)的表現(xiàn),至少是現(xiàn)今的表象。借助于發(fā)達(dá)的軟件,他省去了很多硬件,甚至包括安全鎖,所以他的成本也更低。

更重要的,他是AECL的親兒子。

1983年,加拿大總領(lǐng)事館在美通社新聞中對(duì)其進(jìn)行了隆重發(fā)布,并在隨后交付出了11臺(tái),其中5臺(tái)在美國,6臺(tái)在加拿大。巧合的是,后來發(fā)生爆炸的切爾諾貝利四號(hào)反應(yīng)堆也是在這年上線的。

輻射的衡量單位是倫琴。

在切爾諾貝利爆炸的反應(yīng)堆旁站十分鐘,受到輻射量大概是5000倫琴。

Therac-25在事故中給患者施加的劑量是切爾諾貝利的4倍,能夠達(dá)到20000倫琴以上,是常規(guī)治療的100倍。

而短期內(nèi)全身接受1000倫琴的劑量便會(huì)致人死亡。

所以說如果切爾諾貝利像一個(gè)核彈,那么Therac-25就像一個(gè)殺手,披著治病救人的外衣反復(fù)作案——在1985-1987年間,他總共制造了6起事故,其中4人死亡,2人重傷。

02  失控的核能

Therac-25系列事故的本質(zhì)就是AECL的失控——他的軟件無法控制他的硬件,他也控制不了他的軟件,而他的軟件和硬件一起,又正在控制著核輻射。

1985年6月,美國佐治亞州的肯尼斯通腫瘤中心,第一起。

這是一次胸部腫瘤的常規(guī)放射治療,射線強(qiáng)度預(yù)期200倫琴,照射位置為前胸,患者是一名61歲女性。但治療開始后不久,患者便感覺到了劇烈的灼燒感,隨后前胸的照射點(diǎn)、后背的貫穿性對(duì)應(yīng)位置都出現(xiàn)了紅腫,這很像輻射傷。醫(yī)生立即停機(jī)并聯(lián)系了AECL。

三天后,AECL回了電話,表示過量輻射是不可能的。

患者不認(rèn)可這個(gè)結(jié)論,醫(yī)院又給不出其他合理解釋,于是患者便把醫(yī)院和AECL一塊告上了法庭。但AECL始終拒絕承認(rèn)Therac-25有問題,再加上治療當(dāng)天Therac-25的打印功能被禁止了,當(dāng)時(shí)的機(jī)器參數(shù)并沒有備份,所以該起訴訟最終庭外和解。

患者的胸部被切除,后來經(jīng)過測算,當(dāng)時(shí)的輻射強(qiáng)度大概在15000倫琴到20000倫琴之間。

這起事故發(fā)生在美國,美國有個(gè)FDA(食品藥品監(jiān)督管理局),但Therac-25上市并沒有經(jīng)過FDA的測試。

FDA的上市認(rèn)可有兩種,一種是PMA(Pre-market Approval)),一種是510K。PMA需要廠家充分證明該設(shè)備的安全性,并通過FDA組織的臨床試驗(yàn)與實(shí)驗(yàn)室測試。而510K則輕松的多,只要證明該設(shè)備與市場上已存在的設(shè)備具備等同性即可。

Therac-25上市用的是510K,大概是因?yàn)樗cTherac-20具有某種意義上的等同性。

實(shí)際上不僅FDA沒有對(duì)Therac-25進(jìn)行過獨(dú)立測試,AECL也沒有,他在1986年提交給FDA的事故報(bào)告里承認(rèn)了這一點(diǎn)。

AECL表示一直以來所有設(shè)備(Therac-6、Therac-20、Therac-25)上的軟件都是一塊進(jìn)行測試的,沒有單獨(dú)對(duì)Therac-25進(jìn)行過完整測試。Therac-25的很多代碼是從Therac-6中移植過來的,大概AECL認(rèn)為測過Therac-6就相當(dāng)于測過Therac-25了吧。

另外還需要一提的是,Therac-6的代碼都是法國伙伴CGR編寫的。

后來的事實(shí)證明,AECL對(duì)這些代碼知之甚少。

1985年7月,加拿大安大略省癌癥基金會(huì),第二起。

和第一起類似,患者在治療過程中感覺到了劇痛和灼燒感,但詭異的是,明明是輻射過量,Therac-25顯示器卻多次報(bào)出了“No DOSE delivered (沒有劑量傳輸)”信息。

隨后AECL派了工程師去調(diào)查,無法復(fù)現(xiàn)錯(cuò)誤。

但他還是表現(xiàn)出了一副控制了局面的樣子。

他“猜測”問題是由電路故障導(dǎo)致的,然后基于這個(gè)猜測,AECL召回Therac-25進(jìn)行了改造。根據(jù)說明,這次改造可以將安全性提升5個(gè)數(shù)量級(jí),也就是原來的10萬倍。

不知道這個(gè)數(shù)字是怎么來的,更不知道為什么如此安全,AECL還是在改造說明中建議用戶使用Therac-25時(shí)最好進(jìn)行“目視檢查”。

這起事故的患者三個(gè)月后死亡,后來經(jīng)過測算,當(dāng)時(shí)的輻射強(qiáng)度大概在13000倫琴至17000倫琴之間。

1985年12月,美國雅基瑪谷紀(jì)念醫(yī)院,第三起。

這次事故中的Therac-25剛剛經(jīng)過了AECL的所謂5個(gè)數(shù)量級(jí)安全性的改造。

和之情的情況類似,先是病人在放療后身體出現(xiàn)了疑似過量輻射的紅斑,于是醫(yī)生聯(lián)系A(chǔ)ECL,之后便是AECL的否認(rèn)三連:先回復(fù)不可能,然后表示從沒有出現(xiàn)過類似的情況,最終猜測可能是其它原因。而且這次AECL還附了一個(gè)兩頁紙的說明,詳細(xì)列舉了Therac-25不可能過量輻射的理由。

醫(yī)生沒有辦法,最終只能在院方的報(bào)告中將事故原因歸為未知。

病人沒有死亡,但留下了殘疾和伴隨終生的疼痛。

03 Debug

debug是查找軟件bug的過程,其中的關(guān)鍵是復(fù)現(xiàn)。

所謂復(fù)現(xiàn),是指找到bug發(fā)生的條件,然后模擬這些條件,讓bug重復(fù)發(fā)生。前面事故一件件發(fā)生,而AECL始終沒有成功復(fù)現(xiàn)過問題。

直到第四起和第五起。

這兩起都發(fā)生在一個(gè)地方,前后間隔不過三周,本質(zhì)就是一次天然復(fù)現(xiàn)。

1986年3月,美國東德克斯說腫瘤中心,第四起。

事故的跡象都是一樣的,患者的癥狀也是一樣的,AECL的回復(fù)同樣是一樣的:不可能、沒聽說、應(yīng)該是其它原因。

這次AECL給出的其它原因是漏電,大概因?yàn)榛颊咴诿枋霎?dāng)時(shí)的感覺時(shí)說像遭受了電擊,并聽到了滋滋聲吧。

和之前一樣,AECL靠著否認(rèn)三連又一次控制了局面。

但很快,第五起就發(fā)生了。

1986年4月,美國東德克斯說腫瘤中心,第五起。

第五起和第四起發(fā)生在同一個(gè)地方,對(duì)醫(yī)院和患者來說,這顯然是一種巨大的不幸。但對(duì)整個(gè)事件來說,這卻像一種幸運(yùn),因?yàn)檎侨绱瞬抛孴herac-25的bug現(xiàn)了原形。

不過復(fù)現(xiàn)bug的不是AECL,而是這個(gè)醫(yī)院的醫(yī)生。

第五起事故發(fā)生后,他不再相信AECL三周前給出的解釋,開始自己調(diào)查事故原因。

他發(fā)現(xiàn)兩次事故中,一個(gè)共同點(diǎn)是操作員都修改過處方。

圖1是Therac-25的電腦輸入界面。Therac-25支持兩種射線模式,一種是X射線,一種是電子束,在正常的流程中,操作員依次從左上角輸入到右下角,輸入患者姓名、射線類型、射線能量等參數(shù),最終光標(biāo)會(huì)停到右下角,也就是綠色高亮的位置。

在這兩次事故中,操作員均是在一切都輸入完成后發(fā)現(xiàn)了錯(cuò)誤:射線類型(BEAM TYPE)一欄應(yīng)該是E(電子束),但錯(cuò)誤輸入成了X(X射線)。于是他移動(dòng)光標(biāo)對(duì)其進(jìn)行了修改,然后又將光標(biāo)移回了綠色高亮位置,隨后點(diǎn)擊確認(rèn),啟動(dòng)治療。

圖1 Therac-25的操作界面

但這個(gè)操作還不能保證復(fù)現(xiàn)問題,經(jīng)過反復(fù)試驗(yàn),醫(yī)生找到了其中的關(guān)鍵,那就是時(shí)間,時(shí)間要快。

確切的說,修改要在八秒以內(nèi),這樣bug就能穩(wěn)定復(fù)現(xiàn)。

然后在醫(yī)生的幫助下,AECL終于找到了Therac-25的bug。

圖2 Therac-25 偽代碼片段

實(shí)際上這個(gè)bug相當(dāng)簡單,僅僅是一句放錯(cuò)了位置的代碼(見圖2),但其隱蔽性要結(jié)合Therac-25的操作流程(圖3)來解讀才能顯現(xiàn)出來。

圖3 Therac-25執(zhí)行流程圖

把大象裝冰箱要分三步,用Therac-25進(jìn)行治療也要分三步:第一步,操作員輸入處方;第二步,Therac-25根據(jù)處方進(jìn)行機(jī)器設(shè)置;第三步,開始治療。正常情況下,三步順序執(zhí)行沒有任何問題。

但這兩次事故中操作員修改處方數(shù)據(jù),實(shí)際上形成了一種并行。

并行是計(jì)算機(jī)領(lǐng)域的一個(gè)術(shù)語,指多件事同時(shí)執(zhí)行,很多簡單問題一并行就變的難以理解。

Therac-25的原始射線非常集中,而這對(duì)人體危害是很大的,所以Therac-25會(huì)在射線路徑上放置一系列磁鐵,來對(duì)射線進(jìn)行分散。

設(shè)置磁鐵的偽代碼見圖2。

如果懂一些編程的話,應(yīng)該可以發(fā)現(xiàn)其標(biāo)黃的用以清除標(biāo)記位的指令(注釋3)放錯(cuò)了位置,應(yīng)該放在Magnet函數(shù)的循環(huán)外(注釋4)。

不懂編程也沒關(guān)系,只需要知道這段代碼有bug,而這個(gè)bug會(huì)讓Therac-25在調(diào)節(jié)磁鐵的時(shí)候,忽略操作員對(duì)處方進(jìn)行的修改。

調(diào)整磁鐵需要8秒鐘左右,這8秒,便是Therac-25的死亡窗口。

在這兩起事故中,操作員的修改均發(fā)生在這個(gè)窗口內(nèi),所以修改都沒有生效,也就是說,Therac-25實(shí)際執(zhí)行的是X射線模式。

在Therac-25的設(shè)計(jì)中,X射線模式的能量只有一種,就是系統(tǒng)最大的25MeV,然后用一個(gè)射線過濾器來調(diào)節(jié)高強(qiáng)度的原始射線,將其減弱到治療所需強(qiáng)度。

只不過這個(gè)過濾裝置需要手工放置到照射路徑上,而在這兩次事故中顯然都沒有,因?yàn)椴僮鲉T都以為正在執(zhí)行的是電子束模式!

所以悲劇就這樣發(fā)生了。

患者受到了原始的高強(qiáng)度射線的照射,事故中他們聽到的滋滋聲不是電流聲,而是射線測量器被射線穿透后發(fā)出的聲音,就像把42度量程的體溫計(jì)扔到開水里一樣,它已經(jīng)飽和失效了。

后來經(jīng)過測算,當(dāng)時(shí)的輻射強(qiáng)度為25000倫琴,是站在爆炸的切爾諾貝利反應(yīng)堆旁邊十分鐘接受的量的5倍。

兩名患者均在不久后死亡。

04 后知后覺的監(jiān)管

第五次事故發(fā)生后,醫(yī)生把事故和復(fù)現(xiàn)事故的詳細(xì)步驟告知了AECL。

AECL立即給所有用戶發(fā)了一份聲明,告知Therac-25存在問題,并給出了修改方案:

禁止向上移動(dòng)光標(biāo)。

就這么簡單。

然后他又給FDA做了匯報(bào)。

這是AECL第一次正式給FDA匯報(bào)問題,前面四起事故中,只有第二起(發(fā)生在加拿大)AECL告知了美國的FDA,但只含糊的說Therac-25存在一個(gè)需要“目視檢查”的問題,而且他還進(jìn)行了召回。

不過AECL到底還是晚了一步,在此之前,F(xiàn)DA已經(jīng)獲得了來自德克薩斯州健康部門的“非法”匯報(bào),并且已經(jīng)開始調(diào)查AECL的問題了。

說“非法”,是因?yàn)楫?dāng)時(shí)的美國法律只要求醫(yī)療設(shè)備的制造商匯報(bào)問題,并沒要求醫(yī)院等使用者,所以FDA一直不知道發(fā)生了這么多起事故。實(shí)際上當(dāng)時(shí)FDA對(duì)醫(yī)院發(fā)生的、因醫(yī)療設(shè)備問題而引起的傷亡事故所知不足1%。Therac-25事件后,美國對(duì)這條規(guī)則進(jìn)行了修改,同樣要求使用者向FDA匯報(bào)問題。當(dāng)然這都是后話。

當(dāng)時(shí)FDA很快否定了AECL那個(gè)禁止向上移動(dòng)光標(biāo)的用戶聲明,并要求他按照《健康與安全輻射控制法》的規(guī)定進(jìn)行整改,具體包括:通知所有購買者、調(diào)查問題、確定解決方案、提交對(duì)應(yīng)的改進(jìn)計(jì)劃。

這時(shí)時(shí)間是1986年4月,驚世駭俗的切爾諾貝利大爆炸也發(fā)生在這一個(gè)月。

1986年5月,F(xiàn)DA再次要求AECL重新通知用戶,詳細(xì)說明問題,并提交改進(jìn)計(jì)劃。

這時(shí)Therac-25的用戶也坐不住了,他們聯(lián)合起來,舉辦了第一屆Therac-25用戶大會(huì)。

從某種意義上來說,這很像一種自救:事故在不斷發(fā)生,而廠家給出的信息總是令人失望,對(duì)問題避重就輕,對(duì)改進(jìn)夸大其詞。作為用戶,他們至少享有知情權(quán)。用戶聚在一起,討論了事故的詳細(xì)經(jīng)過,然后開始共同尋找解決方案。AECL也派人參加了會(huì)議,他們表示之前沒透露太多信息完全是不想引發(fā)謠言,AECL絕對(duì)沒有keep things quite的公司政治。

用戶討論后要求增加硬件鎖。

AECL拒絕了他們,理由是多余。

但他表示自己正在開發(fā)一個(gè)能夠把Therac-25的安全性再提升幾個(gè)量級(jí)的補(bǔ)丁。這個(gè)補(bǔ)丁于1986年6月13發(fā)布,叫補(bǔ)丁V1。

不過FDA馬上否定了補(bǔ)丁V1,并要求AECL給出詳細(xì)測試計(jì)劃。

AECL表示測試計(jì)劃很難,但可以再加一個(gè)補(bǔ)丁,于是在1986年12月22日發(fā)布了補(bǔ)丁V2。

V2上線后的第25天,第六起事故發(fā)生了。

1987年1月,美國雅基瑪谷紀(jì)念醫(yī)院,第六起。

第六起和第三起發(fā)生在同一個(gè)地方。

在用戶和FDA的壓力下,AECL很快查明了問題。

簡單來說,這起事故是由另一個(gè)bug引起的。和之前的一樣,單從本身看,這個(gè)bug本身也不是什么大問題,僅僅是一個(gè)字節(jié)使用不當(dāng)而已,但它們的影響都是致命的。

至此,AECL的信任被消耗的差不多了,哪怕他宣布立即上線之前被否定的硬件鎖,也沒有再讓大家相信Therac-25的安全性。

FDA很快下線了所有的Therac-25。

AECL繼續(xù)孜孜不倦的開發(fā)補(bǔ)丁。1987年7月21日,他發(fā)布了最后一版補(bǔ)丁,第5版,所以叫補(bǔ)丁V5。

但這個(gè)補(bǔ)丁并沒有V5起來,后面的日子里,Therac-25江河日下。

1988年,AECL重組了開發(fā)Therac-25的醫(yī)療部門,將其更名為Theratronics,并試圖打包賣給別人,未遂。

1991年,因?yàn)門herac-25的問題,F(xiàn)DA禁止了該公司的全部產(chǎn)品線。

2005年,Theratronics公司解散。

Therac-25事件后,F(xiàn)DA開始仔細(xì)研究醫(yī)療軟件設(shè)備的審查標(biāo)準(zhǔn),并逐漸發(fā)展成了現(xiàn)行的IEC62304(2006版,國內(nèi)對(duì)應(yīng)為YY/T0664)。這也是現(xiàn)在醫(yī)療軟件開發(fā)過程管理的基本標(biāo)準(zhǔn)。

05 尾聲

Therac-25其實(shí)就是一種機(jī)器人。

自機(jī)器人被發(fā)明,甚至被幻想出來開始,關(guān)于它不聽話了要怎么辦的擔(dān)憂就沒有停過。

而且這并不像科幻小說那么遙遠(yuǎn),你肯定聽過自動(dòng)駕駛的故障,也用過只知道繞圈子息事寧人的智能客服,從廣義上來說,這都是機(jī)器對(duì)你的碾壓。

給牛頓寫了墓志銘的英國人蒲柏有這么一句詩:

To err is human; to forgive, divine。

犯錯(cuò)是人性,寬恕是神性。

或許比起等待機(jī)器產(chǎn)生自我意識(shí),然后要求它們憑借善良本性,遵循阿西莫夫的機(jī)器人三定律來,這會(huì)是一個(gè)更理性的選擇。

畢竟我們都知道人不能因噎廢食。

參考資料:

1.[Threac-25], https://en.wikipedia.org/wiki/Therac-25
2.[Medical Devices : The Therac-25], Nancy Leveson
3.[ An Investigation of the Therac-25 Accidents],Leveson, Nancy G.; Turner, Clark S
4.[Fatal Dose - Radiation Deaths linked to AECL Computer Errors],http://www.ccnr.org/fatal_dose.html

本文系作者 郭華 授權(quán)鈦媒體發(fā)表,并經(jīng)鈦媒體編輯,轉(zhuǎn)載請(qǐng)注明出處、作者和本文鏈接
本內(nèi)容來源于鈦媒體鈦度號(hào),文章內(nèi)容僅供參考、交流、學(xué)習(xí),不構(gòu)成投資建議。
想和千萬鈦媒體用戶分享你的新奇觀點(diǎn)和發(fā)現(xiàn),點(diǎn)擊這里投稿 。創(chuàng)業(yè)或融資尋求報(bào)道,點(diǎn)擊這里

敬原創(chuàng),有鈦度,得贊賞

贊賞支持
發(fā)表評(píng)論
0 / 300

根據(jù)《網(wǎng)絡(luò)安全法》實(shí)名制要求,請(qǐng)綁定手機(jī)號(hào)后發(fā)表評(píng)論

請(qǐng) 登錄后輸入評(píng)論內(nèi)容

快報(bào)

更多

17:37

促進(jìn)汽車數(shù)據(jù)跨境流動(dòng),中歐汽車工業(yè)協(xié)會(huì)簽署備忘錄

17:36

中國太保蘇罡:適時(shí)增加權(quán)益資產(chǎn)配置

17:35

機(jī)構(gòu):海灣能源設(shè)施修復(fù)估算至少達(dá)250億美元

17:34

美圖公司:2025年歸母凈利潤6.98億元,同比下降12.7%

17:31

國邦醫(yī)藥:全資子公司擬投資10.2億元建設(shè)醫(yī)藥原料藥及中間體綠色智造技改項(xiàng)目

17:31

上期能源:進(jìn)一步擴(kuò)大合格境外投資者參與商品期貨、期權(quán)交易范圍

17:29

上期能源發(fā)布20號(hào)膠和陰極銅期貨期權(quán)合約

17:24

商務(wù)部、中國出口信用保險(xiǎn)公司:加強(qiáng)出口險(xiǎn)和內(nèi)貿(mào)險(xiǎn)聯(lián)動(dòng),加大對(duì)外貿(mào)企業(yè)拓內(nèi)銷的支持力度

17:23

財(cái)政部:2月全國共銷售彩票343.13億元,同比下降18%

17:22

外匯局:必要時(shí)強(qiáng)化宏觀審慎管理,維護(hù)外匯市場平穩(wěn)運(yùn)行

17:20

阿斯利康A(chǔ)DC藥物新適應(yīng)證在中國實(shí)現(xiàn)“全球首發(fā)”

17:19

兩面針:籌劃控制權(quán)變更,股票下周一停牌

17:16

外匯局:預(yù)計(jì)2026年境外來華直接投資保持凈流入,外資增持人民幣資產(chǎn)意愿逐步提升

17:15

外匯局:2026年中國對(duì)外投資收益和境外來華投資收益均有望延續(xù)增長態(tài)勢

17:14

樂華娛樂:與王一博續(xù)簽獨(dú)家藝人管理合同

17:13

小鵬汽車:公司中文名稱將由“小鵬汽車有限公司”變更為“小鵬集團(tuán)”

17:12

比特幣短線下挫,跌破6.8萬美元

17:12

國際原油期貨持續(xù)拉升,美油布油均漲超2%

17:11

國家外匯局:2026年國際收支有條件保持基本平衡

17:07

央行:當(dāng)前中國金融業(yè)運(yùn)行總體穩(wěn)健,金融風(fēng)險(xiǎn)持續(xù)收斂,金融機(jī)構(gòu)整體健康

掃描下載App