專利名稱::把不同源語言轉移到一個執行介質的制作方法本公開基于1999年6月4日提交的法國專利申請No.9907239,并由此請求優先權,其內容附此作參考。因而本發明還針對數據處理裝置的開放性。本發明涉及為諸如java卡和其他智能卡操作系統等可編程數據處理裝置編寫的應用程序的互操作性。互操作性還附帶有安全方面的要求。在可編程智能卡領域里,每一種用以編寫準備裝入一種卡中的應用程序的編程源語言都是與特定的執行介質緊密聯系的,后者一般具軟件性質,諸如虛擬機等,但還具有硬件性質,例如微處理器等。為了能夠把一個程序裝入智能卡,對用給定的源語言編寫的程序加以編譯,然后裝入準備接收用所述給定源語言編寫的程序的智能卡。所述卡接收編譯后的程序并由專門用來執行最初用所述給定源語言編寫的程序的執行介質執行。如圖1所示,每一種智能卡Cn都含有各自的執行介質SEn,它不同于其他智能卡C1至CN中的那些執行介質SE1至SEN。1和N之間的整數n標志若干種源語言LS1至LSN中預定的語言。每一個卡Cn,只有在它們是用各自的源語言LSn編程時,才可以執行應用程序Pn。在對準備裝入的程序進行編譯之前,程序經過代碼校驗,以便檢查準備裝入的程序是否并未破壞與所述源語言LSn相關的執行介質SEn所提供的保密特點。事實上,在這樣的一組卡中,在以下背景下用給定源語言開發的程序Pn與目標執行介質SEn緊密聯系1)由源語言LSn提供的數據結構和操作是專門的,以便編譯出對源語言LSn專用的執行介質SEn而言在大小和速度上優化的表達;2)由源語言LSn提供的程序庫BPn一般與源語言相關,并針對專用于所述源語言的執行介質進行了優化;而且3)程序Pn在其裝入卡Cn之前的校驗與由所述目標執行介質Sen提供的保密特點緊密聯系。源語言LSn與其執行介質Sen之間的這種緊密聯系表現在校驗、編譯和裝入鏈CVCCn上。這個鏈管理著用高級源語言編寫的程序Pn向準備好由專用于源語言LSn的執行介質SEn有效執行的緊湊形式的變換。本發明的一般的核心問題是用不同源語言LS1至LSN中任何一種編寫的程序與不同執行介質SE1至SEM的鏈接,M是任何一個等于或不同于整數N的整數。這個一般問題可以分解為以下3個子問題按照第一個子問題SP1,例如,最好讓用源語言LSn編寫的程序P運行在專用于給定源語言LSm的執行介質SEm上,下標m在1與M之間。第二個子問題SP2是把各自以不同的源語言LS1至LSN編寫的程序P1至PN裝入能夠為這些不同的程序提供就存儲器大小、執行速度、它們的程序庫BP1至BPM及其保密特點而言是有效的環境的通用的執行介質SEm中。第三個子問題SP3旨在讓各自以不同的源語言LS1至LSN編寫的不同的程序P1至PN在通用的執行介質SEm中共存。對于第三個子問題,必須處理源于不同編程環境并放入同一個物理介質中的程序P1至PN的安全性。這三個子問題SP1,SP2和SP3合起來要,例如在保持安全和保護、交互機制的情況下解決為可編程智能卡編寫的不同應用程序的互操作性,為了解決這三個子問題SP1,SP2和SP3,本專業的技術人員面臨以下三種類型的解決方案,但是它們都不是完全令人滿意的。第一種解決方案,最簡單的,也是最常用的,正如圖2中用編寫操作W1和WM所指示的,是把以專用于安裝在智能卡Cn中的執行介質SEn的源語言LSn編寫的程序Pn重寫為分別以專用于安裝在智能卡C1至CM中的執行介質SE1至SEM的源語言LS1至LSM編寫的程序Pn1和PnM。第一種解決方案主要缺點是對程序員而言繁重而又煩悶的手工任務,把程序Pn的算法重寫為程序Pn1,PnM,它必須適應新的源語言LS1,LSM的數據結構和程序庫BP1,BPM。另外,每一種新的執行介質SE1,SEM所提供的安全機制要求對重寫的程序Pn1,PnM的代碼重新進行考證。第一種解決方案只涉及子問題SP1,因而只解決了程序互操作性問題的很小一部分。此外,若在新卡上出現另一種與不同于執行介質SE1,SEn和SEM的執行介質相關的源語言,則又必須涉及所有用最初的源語言LSn編寫的舊程序,以便用這另一種源語言將其重寫。第二種解決方案包括交叉編譯。參照圖3,例如,假定有兩種各自用最初專用于兩種智能卡C1和C2中的執行介質SE1和SE2的源語言LS1和LS2編寫的程序P1和P2,通過校驗、編譯、裝入鏈CVCC1和CVCC2中的編譯之后,它們的每一個都可以以傳統方式在執行介質SE2和SE1上執行。但是,程序P1和P2必須分別在執行介質SE2和SE1中執行,而且它們都必須在包含于第三智能卡C3中專用于第三種源語言LS3的第三種執行介質SE3上執行。為了在不同于專用于最初的源語言LS1或LS2的執行介質的目標執行介質SE2和SE3或SE1和SE3上執行程序P1或P2,程序P1和P2要經過另一個校驗、編譯和裝入鏈CVCC21和CVCC31或CVCC12和CVCC32中的編譯。與第一種解決方案相比,在程序員方面第二種解決方案不再需要手工重寫這些程序,但要求可以獲得許多校驗、編譯和裝入鏈CVCC12,CVCC21,CVCC31,CVCC32。更一般地說,對于N種源語言LS1至LSN和M種執行介質SE1至SEM,要求有N*M種校驗、編譯和裝入鏈。這些鏈在其數量上和復雜性上,要求相當可觀的硬件、軟件和人力的投資。除了這個主要缺點之外,第二種解決方案還有以下缺點-就存儲器大小和執行速度而言這樣產生的程序性能差,它們在其中執行的執行介質并非從一開始就適當地適配編寫這些程序所用的源語言LS1和LS2的數據結構、操作和程序庫;-當出現新的源語言時,校驗、編譯和裝入鏈的生產在數量上等于現存目標執行介質SE1至SEM數,反之當出現新的執行介質時,在數量上則等于現存源語言數;-為了采用這些程序,預先給所有下載站裝入配備不同執行介質SE1至SEM用的編譯好而且代碼校驗過的程序,這使第二解決方案變得更為復雜和成本高昂。第二解決方案只涉及子問題SP1,但與第一解決方案相比,它采用了自動化的方式,而且這樣只解決了互操作性問題中非常小的一部分。另外,若在新卡上出現有別于執行介質SE1至SEM的其他執行介質相關的另一種源語言,則必須讓所有最初的程序P1至PN通過新的校驗、編譯和裝入鏈,為所述另一種執行介質產生經過校驗的代碼。第三種解決方案提出一種智能卡CP,它的每一個都包含若干種執行介質,例如三種執行介質SE1,SE2和SE3,如圖4所示。這樣,可以分別把用不同源語言LS1,LS2和LS3編寫的程序P1,P2和P3通過各自的校驗、編譯和裝入鏈CVCC1,CVCC2和CVCC3裝入卡CP。卡CP為每一個程序P1,P2和P3提供就像它分別裝在只具有專用于各自源語言LS1,LS2和LS3的執行介質SE1,SE2和SE3的卡中完全一樣的功能。第三種解決方案有利地保留了分別與源語言LS1,LS2和LS3相關的校驗、編譯和裝入鏈CVCC1,CVCC2和CVCC3,并且可以解決子問題SP2。盡管如此,第三種解決方案有一個主要缺點,就是它目前更加不切實際,因為要裝入卡中的不同執行介質數量巨大,而且每一種都代表數量巨大的代碼。這個主要缺點也出現在BertilFoliot和IanPiumarta的題為“VirtualVirtualMachines(虛擬虛擬機)”(1997年9月)的出版物或者同一作者(1988年)的題為“DynamicallyConfigutableMulti-languageExecutionPlatform(可動態配置的多語言執行平臺)”的出版物中所描述的類型的VVM體系結構中。在這種體系結構中,在存儲器內存在幾個執行支持平臺。這些執行支持起著下層系統原語附加抽象層的作用。但是,目前在智能卡中支持這種類型的解決方案所必須的存儲器是不可行的。就算可以購到,例如與其存儲多個執行介質,不如用這些存儲器存儲額外的數據和程序更有用。為此目的,把用各自執行介質專用的源語言編寫的若干個程序轉移到一種數據處理裝置上的方法包括以下步驟-把每一個程序編譯成用代表這些源語言最小子集的中間語言表達的相應的程序;-在數據處理裝置中設置一種專用于中間語言的預定的執行介質;和-把相應的中間語言程序裝入配備有使相應的源語言適合于中間語言的相應的程序庫的數據處理裝置,以便在預定的執行介質中執行中間語言程序。本發明的基礎是尋找一種最初是存在于預定的基于微處理器的數據處理裝置的執行介質中的最小公分母(lowestcommondenominator)的執行介質;例如,所述執行介質包含于已知的不同類型的智能卡中,就是說其程序是用不同源語言編寫的執行介質。因此,本發明提供上面提出的第三解決方案的優點,建議把所有可能的執行介質的集合放入一個基于微處理器的數據處理裝置。但是,本發明不要求相當大的或許甚至是不可能達到的存儲器大小,而只是把最小的、但是靈活的中間語言專用的縮減了的執行介質裝入每一個諸如智能卡等的數據處理裝置。這樣,中間語言不與任何一種特定的源語言相聯系,而是用作基礎語言,用以作為若干源語言的目標。于是安裝中間語言所需的存儲器縮小了,因而程序的執行比上面建議的第三解決方案快。這樣,本發明使用以下的組合-既能夠表達用不同源語言編寫的程序,又能夠表達特定的保密特點的中間語言以及它們的正確操作所必需的程序庫,和-專用于中間語言的執行介質,但它能夠重新配置,以便既在工作環境上又在應用程序的安全檢查上最好地適應每一種語言的要求。按照本發明的一個變型,編譯步驟可以包括以下步驟-用相應的執行介質專用的機器語言把程序編譯成編譯后的程序,以及-把編譯后的程序轉換成以中間語言表達的相應的程序。從程序編譯結果產生中間語言的代碼的程序開發者可能對這個變型感興趣。允許進行這一操作的工具是轉換器。它用中間語言寫的操作代替與所述源語言相關的相應的執行介質的指令。按照本發明的另一個方面,所述方法包括在裝入步驟之前從相應的中間語言程序提取校驗信息的步驟和在裝入步驟之后在預定的執行介質中檢驗所提取的驗證信息的步驟。按照另一個變型,預定的執行介質可以類似于所述各執行介質中的一個。盡管總起來說不如本發明的基本實施例有利,但是當源語言是已經進行了類似的開發和改變過程的語言時,這個變型可能令人感興趣。中間語言最好是可擴展的,而同時預定的執行介質最好是可擴展的或不可擴展的。源語言和中間語言之中最好至少有一種是面向對象的語言。實際上,所述方法可以包括由服務器讀出預定的執行介質的特性的步驟,然后所述服務器執行所述編譯步驟。數據處理裝置可以是例如智能卡。該智能卡可以是包括在移動無線電話終端中的用戶身份卡。按照本發明的最佳實施例,轉移方法旨在使分別用各自的源語言LSn編寫的任何一個任意的程序Pn轉移到按照本發明的包含于諸如下面定義的“通用”可編程智能卡CU等相應的數據處理裝置中的通用執行介質SEU。如圖5左側所示,在開發和提供用相應的源語言LSn(n在1和N之間)寫成的程序Pn的E0的初始步驟之后,轉移方法基本上包括四個步驟E1至E4。程序P1至PN是在與包含卡CU的終端TE通過遠程通信網絡RES連接的服務器SER中開發的。例如,所述終端TE可以是用網絡RES租賃的線路或專線連接到所述服務器的銀行終端;按照另一個例子,例如,終端TE可以是用數字蜂窩無線電話網絡RES連接到服務器SER的GSM型移動無線電話終端,所述服務器通過無線電話網絡的信令網絡連接到移動業務交換中心(MSC),而卡CU是可以從所述終端TE取出的SIM(用戶身份模塊)類型的用戶身份卡。在步驟E1,服務器SER詢問卡CU中的執行介質SEU,以便從中讀出并記錄已經存在的執行介質特征。然后把用源語言LSn寫的程序編譯成用專用于相應的目標執行介質SEn的機器語言表達的編譯后的程序PCn。執行步驟E1的編譯器是一個安裝在服務器SER上的程序。然后,在步驟E2,把編譯后的程序PCn轉換成按照本發明的中間語言LI。與編譯器類似,語言轉換器是一種在服務器SER上實現的并執行步驟E2的程序。中間語言LI主要具有以下兩個性能-可擴展性,語言LI可以擴展基本命令范圍,以便有效地表達源于其他語言的程序;-強類型如眾所周知,借助類型實現的代碼安全機制乃是可用于安全檢查的最精細的結構;于是每一種語言的保密特點都是根據卡中存在初始模型而指定的;中間語言LI允許以目標語言的類型和類的方式進行可擴展的類型檢查。中間語言LI只包含數量非常有限的指令,構成表達不同執行介質SE1至SEN機器語言的最小子集。在步驟E2語言轉換器使用外加的程序庫,以便避免執行系統SEn的每一個基本操作都要用通用執行介質SEU的一組指令代替。這種預防措施減少了裝入卡CU的程序的存儲器容量增大的危險。圖6表示,按照第一實例,關于源語言程序,諸如用面向對象的源語言JAVA表達的代碼段PJ的步驟E1和E2涉及在所述卡中接收由服務器SER發送的消息。步驟E1以傳統方式完成把代碼段PJ編譯成采取稱作偽代碼(字節碼)格式的能在執行介質SEJ,亦即實現了JAVA虛擬機概念的微型計算機上執行的編譯后的二進制程序PJC。傳統上,JAVA語言中的每一條指令產生若干條虛擬機器語言指令行。然后,在步驟E2,所述轉換機制不限于用中間語言LI的偽代碼替換JAVA偽代碼的指令對指令的替換,而是把編譯后的程序PCJ中的基本操作的序列轉變成不同的中間語言序列PJLI,例如確定功能調用變元。由于這種轉換是在卡CU以外完成的,便可安裝在編譯器中使用的優化和變換技術。步驟E2的轉換保證了發送給所述卡的以語言LI表達的代碼的有效性,而不管所使用的是什么源語言。另外,語言轉換有助于產生一種要素,后者提供所述卡CU用來檢查程序生存能力的語言LI的正確操作;在步驟E2結束時,語言轉換器提供對所述卡校驗程序生存能力有用的類型信息。按照第二實例,就像圖6表示JAVA語言代碼段PJ一樣,圖7表示用C語言表達并與工作數組的聲明對應的代碼段PC。以傳統方式編譯準備專用于機器語言的執行介質用的能夠執行C語言程序的程序段PC的編譯步驟E1之后,步驟E2把相應的機器語言段轉換成用中間語言LI表達的序列PCLI。在中間語言LI中,除在初始源語言所特有的序列的結束處產生例外之外,序列PCLI與序列PJLI相同它們包括同樣的變量和常數,以及以同樣的方式表達的命令和操作。因而按照本發明的中間語言LI是可以適配的。按照圖6和7所示的實例任何操作和命令都以施加給對象的消息的形式表達。就已知的面向對象的語言而論,以中間語言表達的新消息可以在任何時間定義。圖5表示第一實施例的第二變型,上右部虛線舉例說明的,例如涉及最初以源語言LSN表達的程序PN的產生。對于這第二變型,編譯和轉換步驟E1和E2用編譯步驟E12代替,后者把用源語言LSN寫成的程序PN編譯成直接用中間語言LI表達的編譯后的程序,接著在步驟E3對它進行校驗并裝入智能卡CU。按照圖7所示的實例,步驟E12直接把C語言程序段PC編譯成語言LI的序列PCLI。接著,回到圖5中的步驟E3,用中間語言LI表達的程序后跟校驗和裝入鏈CVC,對其進行校驗并將其裝入目標智能卡CU。鏈CVC至少部分地,最好完全地裝入卡CU。鏈CVC的其他部分主要涉及中間語言程序執行的動態校驗并且或者被裝入服務器SER或者被裝入接收所述卡的終端TE。在步驟E3中卡CU內的校驗和/或適配機制把卡中接收的并用中間語言表達的代碼變換成可以直接在執行介質中執行的二進制程序形式。中間語言程序用的有效信息,主要有關安全性、類型和容器(containment),可以從程序提取,并在步驟E3期間在終端TE上建立,并在所述程序裝入所述卡后用卡進行校驗。若校驗失敗,則程序無效。按照子問題SP2,這種校驗提供應用所述程序的環境的有效性。在步驟E3中裝入后即進行的校驗可以是最小的,并縮減為對智能卡執行介質特有的鏈接編輯機制。步驟E3的目的是在卡內就地完成在步驟E1和E2或步驟E12中完成的工作。校驗和/或適配機制完全轉換所接收的代碼,并將其變換成可以由所述卡中的通用執行介質SEU執行的程序。這種轉換的目的是通過對其靜態地進行安全檢查,使代碼更有效,安全檢查在動態執行時大大地延長了程序的執行時間。實際上,嵌入卡CU中的板上適配機制可以進行大量的工作,后者建立一個可以直接在執行介質SEU中,亦即在存在于所述卡上的微處理器中執行的程序。圖8舉例說明在步驟E3由適配機制從類似于序列PJLI,PCLI的中間語言序列LI完成的處理的一個實例,以便提供適配后的序列PAD。在步驟E4,中間語言LI程序安裝在準備直接支持中間語言LI的卡CU內。所述卡CU具有特定的適配機制。智能卡CU是可編程的,亦即在其整個生存期間都接收程序,并包含專用于中間語言LI的執行介質SEU。于是,用不同源語言LS1至LSN編寫的程序P1至PN共存于同一卡CU內,所述卡不特定地專用于源語言LS1至LSN之一,但它可以容納以不同的源語言編寫的不同程序,這解決了子問題SP2。通用執行介質SEU只包含初始程序P1至PN的執行介質SE1至SEN有限的子集。步驟E3在裝入用中間語言LI編寫的每一個程序的同時裝入程序庫,以便在步驟E4把源語言LSn適配于中間語言,并從而執行用中間語言寫成的初始程序Pn。中間語言特有的保密特點被表明(areimport)“超過”存在于通用執行介質SEU的保密特點。所述卡CU中通用執行介質SEU的體系結構考慮到這方面,以便給所容納的程序提供在存儲器大小和執行速度上有效的環境,而同時保留保密特點,這解決了子問題SP3。置于卡中并支持中間語言LI的執行的通用執行介質SEU是-可適合于接收每一種所支持的新源語言用的程序庫,以便在其軟件環境下執行最初用新的語言編寫的程序;-在以下兩方面是可靠的通過檢查程序所處理的類型來支持安全機制以及在裝入新程序庫時接收新類型的定義以便描述相關的安全機制。在步驟E4,先進的程序解釋機制涉及執行介質本身。軟件和/或硬件執行介質SEU用作每一個可執行程序的產生目標,以便響應對子問題SP2和SP3的關心。執行介質SEU最好包括不同于它最初所用的一組指令。這個功能使之能夠絕對地完全重新定義通用執行介質SEU,使之能夠直接解釋源自特定語言的代碼。步驟E4所瞄準的擴展機制有利于,例如源自給定語言的代碼部分,并使其可能專門安裝定義不同于卡CU最初的通用執行介質SEU所提供的語義的操作。擴展機制涉及,例如訪問數組的基本指令在越出數組界限時在JAVA語言中會引起例外,而在中間語言LI最初的裝置中所述基本指令可以訪問所述數組的任何位置。一個簡單的解決辦法是如圖9所示,把JAVA語言訪問數組的操作OPJ轉換成中間語言LI的一個操作序列,對后者不擴展。為了避免這樣不必要地擴大代碼(這在卡上是不希望有的),如圖10中操作序列OPLIb第7至10行所示,在執行介質SEU中定義一個基本指令,它完全實現對JAVA偽代碼(字節代碼)的等效語義。按照本發明的一個變型,步驟E3和E4用圖5右側所示的步驟E3d和E4d代替。這個實施例的目的是使執行介質SES特定化為具有已知的硬件,而且若有必要,具有類似于專用于源語言LS1至LSN的初始執行介質SE1至SEN中的一個的軟件的體系結構。在步驟E3d,校驗和裝入鏈CVCd通過優化機制OPT加以擴展,后者產生在卡外是最優的有效的本來的最終碼。最好放松安全約束,因為程序是一勞永逸為特定的智能卡CS產生的,并通過已知的工業部門的可靠性檢查。圖11表示步驟E3d在中間語言LI序列PCLId之間適配為適配后的序列PAd。在步驟E4d,一組程序庫BPn,BPdn由執行介質SES執行,使源自用源語言LSn寫成的程序Pn的程序在其環境下運行。按照這個變型的執行介質SES要求實現M個校驗和裝入鏈,并因此有新語言出現時要編寫新的鏈CVC。這個變型與“通用”執行介質SEU相比不太有利。執行介質SES仍舊取決于預定的執行介質SEn,因而在源語言LSn的程序庫BPn和原來針對另一種語言編程的執行介質SES所希望有的程序庫之間的不適當性要求較大的存儲容量,從而導致較低的效率。權利要求1.一種把用各自執行載體(SE1至SEN)面向的源語言(LS1至LSN)分別編寫的若干個程序(P1至PN)轉移到一種數據處理裝置的方法,其特征在于包括以下步驟-把每一個程序(Pn)編譯(E1,E2;E12)成用代表所述源語言的最小子集的中間語言(LI)表達的各個程序;-在所述數據處理裝置(CU;CS)中提供(E4)為所述中間語言所專用的預定的執行載體(SEU;SES),以及-把所述各中間語言程序裝入(E3)設有使所述各源語言(LSn)適配于所述中間語言(LI)的各自的程序庫(BPn)的所述數據處理裝置中,以便在所述預定的執行載體(SEU;SES)中執行所述中間語言程序。2.如權利要求1中所述的方法,其特征在于所述編譯步驟包括以下步驟-用所述各執行載體(SEn)面向的機器語言把所述程序(Pn)編譯成已編譯程序(PCn),以及-把所述已編譯程序(PCn)轉換(E2)成以所述中間語言(LI)表達的各自的程序。3.如權利要求1或2中所述的方法,其特征在于它還包括在所述裝入步驟(E3)之前從所述各自的中間語言(LI)程序提取驗證信息的步驟,以及在所述裝入步驟之后在所述預定的執行載體(SEU;SES)中檢驗所述提取的驗證信息的步驟(E3)。4.如權利要求1至3中任何一項所述的方法,其特征在于所述預定的執行載體(SES)類似于所述執行載體(SE1至SEN)中的一種。5.如權利要求1至4中任何一項所述的方法,其特征在于它包括由服務器(SER)讀出預定的執行載體(SEU;SES)的特性,然后執行編譯步驟(E1,E2;E12)的步驟。6.如權利要求1至5中任何一項所述的方法,其特征在于所述數據處理裝置是一種智能卡(CU,CS)。7.如權利要求6中所述的方法,其特征在于所述智能卡是包括在移動無線電話終端(TE)中的用戶身份卡。全文摘要本發明在單一執行介質中自動執行若干個用相應的執行介質專用的源語言編寫的程序,而不把程序員局限于用于相應的執行介質類型的單一的源語言。每一個程序都編譯成用代表這些源語言的最小子集的中間語言表達的程序。在諸如智能卡等數據處理裝置中,執行介質是專用于中間語言的。中間語言程序裝入相應的程序庫,所述程序庫使各源語言適用于所述中間語言,以便在所述執行介質中執行中間語言程序。文檔編號G06F9/45GK1367895SQ0081122公開日2002年9月4日申請日期2000年6月2日優先權日1999年6月4日發明者G·格里毛德,J·-J·范德瓦勒申請人:格姆普拉斯公司