鍏堜粙緇嶄竴涓嬫垜浠繖涓」鐩細鏄皢open source鐨勪竴涓疄鐜版嬁鍒拌嚜宸辯殑浜у搧褰撲腑錛堝綋鐒秎icense
涓婃槸娌¢棶棰樼殑錛夈備富瑕佺殑宸ヤ綔鏄Щ妞?灝戦噺鐨勫崌綰э紝鍘熸潵鐨勫疄鐜板彧鏀寔涓繪祦鐨処ntel騫沖彴錛屾垜
浠灝嗚繖涓笢瑗跨Щ妞嶅埌12涓鉤鍙幫紝鑰屼笖鎴戜滑宸茬粡鏈変簡涓濂梡ort灞傜殑API錛屼篃灝辨槸璇存垜浠彧闇瑕?br />
灝嗘墍鏈夋秹鍙婂埌鍜屽鉤鍙扮浉鍏崇殑浠g爜鍏ㄩ儴鏇挎崲鎴恜ort灞備腑瀵瑰簲鐨凙PI銆傚師鏉ョ殑瀹炵幇灞傛涓婁篃寰堟竻
鏅幫紝澶ч儴鍒嗛兘鏄浉鍚岀殑浠g爜錛屽皯鏁頒笉鍚岀殑鍦版柟涔熼兘鏀懼湪浜嗕笉鍚岀殑鏂囦歡銆傜湅璧鋒潵鏄釜闈炲父綆鍗?br />
鐨勯」鐩紝閭d箞鎴戜滑灝辨潵鐪嬬湅榪欐牱涓涓畝鍗曠殑欏圭洰鏄浣曞け璐ャ?/p>
涓鍏?涓漢鎶曞叆榪欎釜欏圭洰錛岃鍒掍袱涓漢鍋氬崌綰э紝涓や釜浜哄仛縐繪錛屾垜琚垎鍘誨仛縐繪銆?/p>
闂涓
鍥涗釜浜洪兘鏄仛java鐨勶紝鍙湁涓涓湪欏圭洰涓嬌鐢–/C++錛屽叾浠栦漢閮藉彧鍋滅暀鍦ㄥ鏍′綔涓氱殑姘村鉤
濡傛灉浠庝笂闈㈢殑闇姹傜湅錛岃繖鏍風殑鐘跺喌瀹屽叏鏄彲浠ユ帴鍙楃殑銆傚彧瑕佺悊瑙d簡妗嗘灦錛屽湪鍚堥傜殑浣嶇疆鍔犵偣
浠g爜灝卞彲浠ヤ簡錛屽凡鏈夌殑浠g爜涔熸槸涓緢濂界殑鍙傜収錛涚Щ妞嶅熀鏈氨鏄釜浣撳姏媧伙紝浠旂粏涓嶅嚭閿欏氨娌¢棶
棰樹簡銆備簨瀹炶瘉鏄庯紝瀵逛簬涓嶇啛鎮夌殑璇█錛岃В鍐抽棶棰樼殑鏁堢巼鏄庢樉涓嬮檷錛屽緢澶氭垜浠姌鑵句簡鍑犲ぉ浜嗙殑
闂錛屾湁緇忛獙鐨勪漢鍙兘涓鍒嗛挓灝辮兘鎼炲畾銆備笉榪囬」鐩粍閲屽湪瀹炲湪鏄病鏈夊叾浠栦漢浜嗭紝榪欎釜椋庨櫓搴?br />
璇ユ槸宸茬粡璁$畻鍦ㄥ唴浜嗐備絾鏄澶氬皬闂鍫嗙Н璧鋒潵鏈夊彲鑳藉氨鏄嚧鍛界殑錛岃繖鍙兘綆楁槸鍏朵腑鐨勪竴涓?br />
浜嗐?/p>
闂浜?/span>
娌℃湁鍙婃椂鐨勪笌鍏朵粬妯″潡闆嗘垚
鎴戜滑榪欎釜鍙風О鏁忔嵎鐨則eam鍦ㄨ繖涓鐐逛笂榪炴晱鎹鋒渶鍩烘湰鐨勫敖鏃╅泦鎴愶紝鎸佺畫闆嗘垚閮芥病鏈夊仛鍒幫紝姹楅
鍟娿傛垜浠彧鏄湪鑷繁鐨勫皬浣滃潑閲屾嫾鍛界殑鎼炲憖鎼烇紝鏈鍚庡彂鐜版垜浠殑涓滆タ鎷跨粰integration team
鏍規湰灝辨病娉昩uild錛岀劧鍚庤姳浜嗗ぇ閲忕殑鏃墮棿鏉ヨВ鍐沖湪鍚勪釜騫沖彴涓婄殑build闂銆傝繖鏃墮棶棰樹竴灝卞嚫
鏄懼嚭鏉ヤ簡錛岄潰瀵逛笉鐔熸倝鐨勮璦錛屼笉鐔熸倝鐨勫伐鍏鳳紝瀹屽叏闄岀敓鐨勫鉤鍙幫紝鍐欒剼鏈幓build涓涓鏉?br />
鐨勫伐紼嬶紙鍘熸潵鐢ㄧ殑閮芥槸宸叉湁鐨勪笢瑗匡級銆傜敱浜巄uild鐨勯棶棰樿繜榪熸病鑳借В鍐籌紝瀵艱嚧鍚庨潰嫻嬭瘯鍜屾垜
浠琭ix bug鐨勬椂闂撮潪甯告湁闄愩?/p>
闂涓?/span>
涓嶆眰鐢氳В
灝辨垜鏉ヨ錛屾垜鍋氬畬縐繪鍚庨兘涓嶇煡閬撴暣涓ā鍧楃殑榪愯鏈哄埗錛屽伐浣滃師鐞嗭紝鍙槸涓涓狝PI緲昏瘧鐨勭爜
宸ャ傚叾浠栦漢涔熼兘宸笉澶氾紝瀵規暣浣撶殑鏋勬灦鍜屽ぇ鑷寸殑嫻佺▼閮戒笉鏄緢娓呮銆備笉榪囨垜浠繖緹や漢榪樻槸寰?br />
寮虹殑錛岄兘鏄痜ix bug鐨勯珮鎵嬶紝姣忓ぉ緇存姢榪欏ぇ閲忓畬鍏ㄤ笉鐔熸倝鐨勪唬鐮侊紝鍗充嬌涓嶆噦錛屼笉澶噦鐓ф牱娓?br />
鍒冩湁浣欍傝繖閲岀殑闂鏄垜浠病鏈夎矗浠繪劅錛屼負縐繪鑰岀Щ妞嶏紝涓哄崌綰ц屽崌綰э紝瀹屽叏涓嶅幓璇曞浘鐞嗚В
鑷繁鎵鍦ㄥ仛鐨勪簨鎯咃紝孌婁笉鐭ワ紝榪欎簺鎷胯繘浜у搧鐨勪唬鐮佹渶緇堣繕鏄鎴戜滑鑷繁鏉ョ淮鎶ょ殑鍟娿傝繖縐嶆儏
鍐典竴鐩村埌欏圭洰鐨勬渶鍚庢湡鎵嶆湁鎵濂借漿錛屼慨浜嗛偅涔堝bug錛屽啀涓嶇啛閮借涓嶈繃鍘諱簡銆備絾榪欑浠庡眬閮?br />
涓鐐圭偣鐨勭悊瑙d笉浠呮晥鐜囦綆涓嬶紝鑰屼笖濮嬬粓瀵逛唬鐮佹病鏈夊厖鍒嗙殑鑷俊銆傚嵆浣跨幇鍦ㄦ垜浠篃涓嶆暍瀵瑰凡鏈?br />
鐨勪唬鐮佸仛澶х殑鏀瑰姩錛屽洜涓烘垜浠畬鍏ㄤ笉鐭ラ亾鍦ㄨ繖閲岀殑淇敼鏄惁浼氬獎鍝嶇殑鍏朵粬閮ㄥ垎銆?/p>
鎴戣寰楀湪欏圭洰鍒氬紑濮嬪簲璇ラ鍏堝涔犲凡鏈夌殑浠g爜錛岄『渚挎俯涔燙/C++鐨勭煡璇嗭紝瀵歸」鐩暣浣撶殑浜嗚В
鏄繀瑕佺殑錛屼篃鏄渶鍩烘湰鐨勩?/p>
闂鍥?/span>
瀵歸闄╀及璁′笉瓚?/p>
緇嗗績鐨勮鑰呭彲鑳藉凡緇忓彂鐜頒簡錛屾垜浠墠闈㈤」鐩殑姒傝堪涓湁涓や釜閲嶈鐨勯闄╂病鏈夎冭檻鍒幫細宸叉湁浠?br />
鐮佷腑鐨刡ug鍜屾垜浠緷璧栫殑port API鐨刡ug錛屾垜浠兘鍋囪瀹冧滑鏄笉瀛樺湪鐨勶紒錛佸氨鏄繖涓や釜涓滆タ璁?br />
鎴戜滑闄峰叆浜嗘償娌兼棤娉曡嚜鎷斻傚瑙傜殑璇翠粠open source鎷跨殑浠g爜璐ㄩ噺榪樻槸闈炲父楂樼殑錛岃屼笖鏈変竴
涓畬鏁寸殑嫻嬭瘯妗嗘灦鍜屽ぇ閲忕殑鑷姩鍖栨祴璇曠敤渚嬶紝浣嗚浣滀負浜у搧錛屾樉鐒惰繕闇瑕侀敜鐐箋俻ort API鐨?br />
闂鐩稿灝戜竴浜涳紝浣嗗緢闅懼彂鐜幫紝鑰屼笖涓鏃﹀嚭闂淇鐨勫懆鏈熼潪甯擱暱錛屾棤鐤戝鎴戜滑鐨勮繘搴︿細鏈?br />
寰堝ぇ鐨勫獎鍝嶃?/p>
鍒氳繃浜員CK鎴戜滑璇達紝TCK閮借繃浜嗭紝搴旇娌″暐闂浜嗭紝鍙槸SVT鎶ヨ繃鏉ヤ竴鍫哹ug錛屾垜浠亶鐒訛紝SVT姣?br />
TCK鐗涘浜嗭紝鐪熸槸浠涔坆t鐨勬祴璇曢兘鏈夈傜瓑SVT閮借繃浜嗭紝紿佺劧鍐掑嚭涓猂AD錛屼竴涓嬪氨鏄崄鍑犱釜bug錛?br />
榪樺彂鐜頒竴涓猻pec娌″疄鐜幫紝涓闂粨鏋滀漢瀹舵槸浜鴻倝嫻嬭瘯 -_-!!
鍋氭渶濂界殑甯屾湜錛屽仛鏈鍧忕殑鎵撶畻浠諱綍鏃跺欓兘鏄傜敤鐨?/p>
闂浜?/span>
鍏靛姏鍒嗘暎
涓婁竴鏉″榪欎釜鏈夌洿鎺ョ殑褰卞搷錛屼篃璺熸垜浠瑃eam浜哄お灝戞湁鍏熾傞」鐩腑鐨?涓漢鍙湁涓涓漢鏄粷澶?br />
閮ㄥ垎鏃墮棿鍦ㄨ繖涓婇潰錛屽叾浠栦漢鏄渶瑕佷簡鍐嶈繃鏉ワ紝鎼炵潃jdwp榪樿鎼炲叾浠栫殑涓滆タ錛屼弗閲嶅垎鏁d簡綺懼姏銆?br />
鏈熼棿鐢變簬娌¤刀涓奡R2錛屼腑闂存湁涓孌電浉瀵圭┖闂茬殑鏃墮棿錛屽ぇ閮ㄥ垎浜洪兘琚娊鍙栧共鍏朵粬鐨勪換鍔★紝榛樿
鏄笉浼氬啀鏈変粈涔堥棶棰樹簡銆傘傘傝繖瀹為檯涓婃槸鎴戜滑team涓鐩村瓨鍦ㄧ殑闂錛屼竴浜哄鑱岋紝姣忎釜浜洪兘娌?br />
娉曚笓娉ㄥ湪涓浠朵簨涓婏紝閫犳垚姣忎歡浜嬮兘鏁堢巼涓嶉珮銆?/p>
闂鍏?/span>
鍙嶉榪熺紦
鏁忔嵎鍟婏紝鍙堢姱浜嗘晱鎹風殑澶у繉銆備粠欏圭洰寮濮嬬殑澶村嚑涓湀鎴戜滑娌℃湁璇曞浘鍘昏幏寰楁垨鑰呬簤鍙栦換浣曞弽
棣堬紝鐩村埌嫻嬭瘯緇勫弬涓庤繘鏉ャ傚嵆浣挎垜浠兘澶熻幏寰楀畬鏁寸殑SVT嫻嬭瘯鐢ㄤ緥鎴戜滑涔熸病鏈夊皾璇曚富鍔ㄥ幓鑾峰彇
鍙嶉錛堣窇SVT嫻嬭瘯錛夛紝鎴戜滑濮嬬粓閮芥槸琚姩鐨勩傛垜浠櫧鐒舵病鍔炴硶璁╁鎴峰皾璇曡繕娌℃寮忓彂甯冪殑鐗?br />
鏈紝浣嗚嚦灝戞垜浠嚜宸卞彲浠ワ紝鍦╰eam鍐呴儴浣跨敤榪樻槸娌′粈涔堥棶棰樼殑銆俲dwp澶у騫蟲椂璋冪▼搴忛兘浼氱敤
鍒幫紝濡傛灉鎴戜滑鑷繁浣跨敤鐨勮瘽錛屽緢澶氭樉鑰屾槗瑙佺殑bug灝變笉浼氬埌鏈鍚庢墠琚彂鐜般傝櫧鐒朵綔涓篠DK鏈簨
涓嶇ǔ瀹氫細褰卞搷澶у寮鍙戠殑鏁堢巼錛屼絾鑳藉強鏃跺彂鐜伴棶棰橈紝灝嗗叾鎵兼潃鍦ㄦ憞綃腑錛屾垜璁や負榪樻槸闈炲父鍊?br />
寰楃殑銆?/p>
闂涓?/span>
鍩虹璁炬柦錛圛nfrastructure錛変笉鍋ュ叏
鎴戜滑鐨刢ode repository榪樻槸涓嶈兘涓嶈鐨勩備負浠涔堜細鍙樻垚榪欐牱鎴戜篃涓嶅お娓呮錛屾諱箣瀹冪幇鍦ㄧ殑鎯?br />
鍐墊槸榪欐牱鐨勶細鎴戜滑鏈夎嚜宸辯殑code repository A錛屾瘡嬈″仛integration build錛屾垜浠細鎶婂綋鍓?br />
鏈鏂扮殑浠g爜鍙戝竷鍒板彟涓涓猺epository B錛岃繖涓狟涓嶄粎鍖呮嫭浜嗘垜浠琷dwp鐨勪唬鐮侊紝榪樻湁鍏朵粬鎴戜滑鏀?br />
榪涗駭鍝佺殑浠g爜錛宨ntegration build浼氫粠榪欓噷鎷夸唬鐮佸幓build銆傛敞鎰忚繖閲岀殑鍙戝竷鍏跺疄灝辨槸澶嶅埗
A閲岀殑鏂囦歡鍒癇騫朵笖淇敼鎵鏈夋枃浠跺ご鐨勬棩鏈熶俊鎭紝榪欎釜鍔ㄤ綔鏄敱鑴氭湰瀹屾垚鐨勶紝commit鐨勬敞閲婂氨
鏄痩oad module balabala涔嬬被娌″暐鎰忎箟鐨勪笢瑗匡紝濡傛灉鐢╯vn diff鐪嬫煇涓増鏈殑淇敼錛屼綘浼氱湅
鍒版墍鏈夌殑鏂囦歡閮借淇敼浜嗭紝緇濆ぇ閮ㄥ垎浠呬粎鏄枃浠跺ご琚敼浜嗐傜湅瀹樺彲鑳借楠備簡錛屼笉灝辨槸涓敤鏉?br />
鍋歩ntegration build鐨勪復鏃跺簱鍢涳紝璁茶繖涔堝騫插槢錛屽叾瀹炴垜浠殑欏圭洰鍙兘鍦ㄨ繖涓復鏃跺簱
build錛屽洜涓轟慨鏀硅繃鐨勮剼鏈兘鍦ㄨ繖閲屻傚悇浣嶇幇鍦ㄨ兘鐞嗚В鎴戜滑鐨勭棝鑻︿簡鍚楋紵鎴戜滑蹇呴』鍦˙涓婂紑
鍙戯紝鑰孊闄や簡鍋氭洿鏂板娌℃湁浠諱綍鐢ㄥ錛屽鏋滆鏌ョ湅鍘嗗彶錛岃鍘籄錛岃鎻愪氦淇敼錛屽涓嶈搗璇峰幓A錛?br />
鎴戝湪B涓婂紑鍙戠珶鐒惰鍘籄涓婃彁浜わ紒錛侊紒灝辮繖鏍鋒潵鍥炵殑鎶樿吘鍟婏紝鎴戜滑鐨勬椂闂村氨榪欐牱娑堣楀晩銆傘傘?/p>
榪欐牱鐪嬫潵鏁翠釜欏圭洰鐪熸槸涓鍥㈢碂錛屼絾鎴戜滑绔熺劧鐪熺殑鎶婂畠鏀捐繘SR3浜嗭紝褰撶劧榪樹細鏈?br />
SR4錛?錛?錛?銆傘傘備負浜嗕笉璁╂儴鍓х戶緇笂婕旇繕鏈夊緢澶氶渶瑕佸仛錛?/p>
1. 淇敼 repository A 涓婄殑build鑴氭湰錛屼互鍚庣洿鎺ュ湪A涓婂伐浣?/p>
2. clean 嫻嬭瘯鐢ㄤ緥錛岃ˉ鍏呮祴璇曠敤渚嬶紝榪欐槸淇濊瘉璐ㄩ噺鐨勭涓鍏熾?/p>
3. 緇勭粐涓嬈$粍鍐卻haring錛宻hare欏圭洰鐨勬暣浣撴瀯鏋訛紝榪愯鏈哄埗錛屽父瑙佸伐鍏風殑浣跨敤錛屽父鐢ㄧ殑瑙?br /> 鍐抽棶棰樼殑鏂瑰紡錛屽皢鍏惰褰曞湪wiki涓娿?/p>
4. 鍙峰彫澶у鍦ㄦ棩甯稿伐浣滀腑浣跨敤鑷繁寮鍙戠殑宸ュ叿錛屽皬鐧介紶浠庤嚜宸卞仛璧楓?br />
The fundamental problem of RPC, which is trying to make remote calls look local, is based on essentially trying to ignore the problems covered by the fallacies or trying to pretend they don't even exist榪欏拰鎴戝湪鑷繁鐨勭澹鏂囦腑鐨勮鐐規湁浜涚浉浼鹼細瀹屽叏浣跨敤娑堟伅鏈哄埗榪涜鏋勪歡闂寸殑閫氳銆傛瀯浠跺彲浠?br /> 鏄垎甯冨紡鐨勬垨鍦ㄥ鍣ㄤ腑鐨勶紝鍩轟簬娑堟伅鐨勯氳閮芥槸瀹屽叏閫傜敤鐨勩傚浜庣綉緇滃簲鐢ㄥ悓鏍峰姝ゃ傚浜庢祦琛?br /> 鐨勭綉緇滃崗璁紝HTTP錛孎TP錛孡DAP 絳夌瓑閮芥槸娑堟伅寮忕殑錛屽畬鍏ㄧ粡鍘嗕簡鏃墮棿鐨勮冮獙銆?br />
涓ラ噸鍚屾剰錛岀悊鐢卞涓嬶細
Network partitions are real, timeouts are real, remote host and service
crashes are real, the need for piecemeal system upgrade and handling
version differences between systems is real, etc. The distributed
systems programmer *must* deal with these and other issues because
they affect different applications very differently.
榪欎竴鐐歸潪甯歌禐鍚岋紝涔熸繁鏈夊悓鎰熴傚湪鍋欶ileServer鐨勬椂鍊欐墍鏈夌殑鑺傜偣閮芥槸閫氳繃RMI榪涜閫氳錛屾渶鍒濅嬌鐢≧MI鐨勭洰鐨勫氨鏄?br /> 綆鍖栫綉緇滈儴鍒嗙殑寮鍙戯紝瀵逛簬涓鑸殑寮鍙戜漢鍛樻棤欏葷悊瑙MI錛屽姩鎬佷唬鐞嗭紝鍙渶瑕佸儚浣跨敤鏈湴鏂規硶涓鏍峰氨鍙互璁塊棶榪滅▼
鑺傜偣銆傝繖縐嶆柟妗堢‘瀹炲緢濂界殑闅愯棌浜嗙綉緇滅粏鑺傦紝浣跨綉緇滃寮鍙戜漢鍛樺畬鍏ㄩ忔槑錛屼絾鏈変釜闂濮嬬粓鏃犳硶寰堝ソ鐨勫鐞嗭細寮傚父銆?br /> 緗戠粶閿欒鏄殢鏃墮兘鏈夊彲鑳藉彂鐢熺殑錛屽浜庝笉鍚岀殑閿欒闇瑕佹牴鎹幆澧冨拰闇瑕佸仛鍏蜂綋鐨勫鐞嗭紝姣斿錛屽璇曞嚑嬈★紝灝濊瘯涓嬩竴涓?br /> 鑺傜偣錛屽浜庢棤娉曞鐞嗙殑榪樺彲浠ョ洿鎺ユ姏鍑恒傝岃繖縐嶇瓥鐣ョ殑閫夋嫨鍜屼嬌鐢ㄥ繀欏葷敱搴旂敤閫昏緫灞傚畬鎴愶紝鍙槸搴旂敤灞傚亣璁炬槸涓嶇煡閬?br /> 緗戠粶瀛樺湪鐨勶紝瀹冪敋鑷蟲棤娉曠煡閬撹嚜宸辮皟鐢ㄧ殑鏂規硶涓摢涓槸榪滅▼璋冪敤錛屽摢涓槸鏈湴璋冪敤銆傝繖縐嶇煕鐩句粠鏍規湰涓婅鏄庝簡緗戠粶鐨?br /> 澶嶆潅鎬у拰澶氭牱鎬ф槸寮鍙戝垎甯冨紡搴旂敤鐨勭▼搴忓憳蹇呴』闈㈠鐨勶紝鏄冧笉鎺夌殑錛岃鐩撮潰榪欐儴娣$殑浜虹敓T_T
涓嬮潰闃愯堪浜嗕嬌鐢ㄧ被鍨嬬郴緇熺殑緙洪櫡錛?br /> Such systems also have problems with impedance mismatch between the
IDL and whatever languages you're translating it to. If the IDL is
minimal so that it can be used with a wide variety of programming
languages, it means advanced features of well-stocked languages like
Java and C++ can't be used. OTOH if you make the IDL more powerful so
that it's closer to such languages, then translating it to C or other
more basic languages becomes quite difficult.
On top of all that, no matter how you design the IDL type system, all
the types won't -- indeed, can't -- map cleanly into every desired
programming language.
綾誨瀷緋葷粺涓鐩撮兘鍦ㄨ繘鍖栵紝浠庡急鍒板己鍒板姩鎬侊紝浣犵浉淇′細鏈変竴縐嶇被鍨嬬郴緇熷彲浠ュ拰鎵鏈?br /> 鐨勫叾浠栬璦榪涜瀹岀編鐨勬槧灝勫悧錛熷鏋滅湡瀛樺湪錛岀被鍨嬬郴緇熺殑榪涘寲灝辨鏃犳剰涔変簡銆傚畾涔?br /> 涓涓柊鐨勮璦錛岀劧鍚庢槧灝勫埌鍏朵粬璇█錛屾渶鍚庡彿縐?#8220;鎴戞槸璺ㄨ璦璺ㄥ鉤鍙扮殑錛?#8221;錛岃繖縐?br /> 瑙e喅闂鐨勬柟寮忔牴鏈氨鏄湁闂鐨勩俉SDL浣跨敤XML鎻忚堪錛屾湁鐫鏇村ソ鐨勫彲鎵╁睍鎬э紝鍙槸
閰掔摱鎹㈡柊閰掞紝鏍圭儌浜嗭紝鍐嶆崲涔熸病鐢ㄣ?br />
Ultimately, RPC is a leaky abstraction. It can't hide what it tries to
hide, and because of that, it can easily make the overall problem more
difficult to deal with by adding a lot of accidental complexity.
涓嬮潰瀵逛負浠涔?message queuing system 閫傚悎鍒嗗竷寮忕郴緇熷仛浜嗗緢濂界殑鎬葷粨錛?br /> Message queuing systems work well because (in no particular
order):
* they don't pretend to be programming language procedure or method
calls, so they avoid the associated impedance mismatch problems
* they don't try to hide distributed systems issues
* coupling is low -- drop a message into a queue here, pick up a
message from a queue there
* queues can be persistent, or more generally, delivery guarantees can
be varied as needed
* asynchrony
* payloads need not conform to some made-up IDL type system
* getting two different messaging systems to interoperate is easier
than getting two different RPC or distributed object systems to
interoperate