【转】Appcelerator公司开发人员谈Titanium和PhoneGap区别

【原文】ComparingTitaniumandPhoneGap

中文版:http://mobile.51cto.com/web-338270.htm

AcommonquestionIgetaskedatdevelopereventsandconferencesishowTitaniumcomparestoPhoneGap.IthoughtIwouldtakesometimetoexplainhoweachtechnologyworksatahighlevel,andassesshowthetwotechnologiescomparetooneanother.

From10,000feet,PhoneGapandTitaniumappeartobesimilar.Theybothprovidetoolsforcross-platformmobiledevelopment.BothalsorequiretheuseofJavaScriptandwebtechnologiesinsomecapacity.BothTitaniumandPhoneGapareopensourcesoftwarewithpermissivelicenses(theTitaniumMobileSDKisreleasedundertheApache2.0license-PhoneGap,whichmightalsobecalleda“distro”oftheApacheSoftwareFoundation-governedproject“Cordova”,issimilarlylicensed).

Butthat’sreallywherethesimilaritiesend.Whilebothtechnologiesexisttoenablecross-platformmobiledevelopment,thephilosophiesandapproachestosolvingthisproblemhaveverylittleincommon.Also,thebusinessgoalsdrivingeachprojectfromtheperspectiveofthesponsoringcompanies(AdobeforPhoneGapandAppceleratorforTitanium)areverydifferent.Iwillattempt,frommyperspective,todescribethesetechnical,philosophical,andbusinessmodeldifferencesinsomedetailinthetexttofollow.

Also,ifyouweren’talreadyaware,IamalongtimeAppceleratorcontributorandemployee.Thatsaid,Ihaveworkedhardtokeepmytechnicalandphilosophicalassessmentsbasedintechnicalfactandtheexplicitlyexpressedgoalsoftheteamsinvolved.IfyoufeelIhavemadeanypointsthatarefactuallyincorrectormisleadinginsomeway,pleaseletmeknowinthecommentsandIwillupdatethispostasappropriate.

Iwillfirstdescribeatahighlevelhowbothtechnologieswork.Iwillalsodescribehowbothtechnologiesareextendedwithadditionalnativefunctionality.Foreachtechnology,Iwillalsosummarizethekeystrengthsandweaknesseswiththeirchosenapproachtocross-platform.Thetechnicaldifferenceswillquicklybecomeobvious,butaftertheseoverviewsandcomparisons,IwillalsodescribewhatIfeelarethephilosophicalandstrategicdifferencesbetweentheplatformsandwheretheyaregoing.

Let’sstartbyexploringPhoneGapandhowitworks.

WhatisPhoneGapTryingToAccomplish?

ThepurposeofPhoneGapistoallowHTML-basedwebapplicationstobedeployedandinstalledasnativeapplications.PhoneGapwebapplicationsarewrappedinanativeapplicationshell,andcanbeinstalledviathenativeappstoresformultipleplatforms.Additionally,PhoneGapstrivestoprovideacommonnativeAPIsetwhichistypicallyunavailabletowebapplications,suchasbasiccameraaccess,devicecontacts,andsensorsnotalreadyexposedinthebrowser.

Atahigherlevel,PhoneGapmightbeconsideredthevanguardoftheemergingW3CDeviceAPIstandards,astheyattempttobringthatfuturetowebdevelopersinthepresent.Today,noplatformmakeswebapplicationsfirstclasscitizens,thoughMozilla’spromisingBootToGeckoplatformhasachancetochangethat.MicrosoftisalsomakinginterestingstridesforWindows8withregardtofirst-classAPIaccesstowebapplications.ButthegoalofPhoneGapistoseizeasubsetoftheserightsforwebapplicationstoday.

EndUserWorkflow,ToolingandInterfaceforPhoneGap

TodevelopPhoneGapapplications,developerswillcreateHTML,CSS,andJavaScriptfilesinalocaldirectory,muchlikedevelopingastaticwebsite.Infact,somePhoneGapdevelopersciteasabonusofthetoolthattheycandevelopinadesktopwebbrowsermostofthetime,withoutneedingthenativetoolchainatall.

TorunaPhoneGapapplicationonanativeemulator/simulator,developerswillgenerateaprojectforeachofthenativeplatformstheywishtosupport,configurethatproject’s“webroot”directoryinXcode,Eclipse,orwhatevernativetoolchainisneeded,andthenruntheprojectusingthattool.Theprecisestepsareoutlinedintheirgettingstartedguides,perplatform.Often,symboliclinksareusedtoroutethe“www”folderacrossmultiplenativeprojectstoacommondirectorylocation.

Installinganative-wrappedPhoneGapapplicationtoadevicerequiresasimilarworkflow.However,toaugmentthatprocessandalleviatetheneedtohavenativeSDKsinstalledlocally,Nitobi(recentlyacquiredbyAdobe)hadcreatedaservicecalledPhoneGapBuild,whichwillgenerateinstallableapplicationsinthecloud.FunctionalitytosupportPhoneGapbuilddeploymenthasrecentlybeenintegratedintoAdobe’sDreamweavertool.

ThetoolsusedwithPhoneGaparethestandardtoolsofwebdevelopment,suchasFirebug,WebInspector,andyourtexteditorofchoice.ThereisalsoanemergingtoolforremotedebuggingknownasWeinrethatisbecomingmorecommonlyused.Overall,thefactthatyouaredevelopinganativeapplicationatallismostlyabstractduringthedevelopmentprocess.

HowPhoneGapWorks

Aswementionedpreviously,aPhoneGapapplicationisa“native-wrapped”webapplication.Let’sexplorehowthewebapplicationis“wrapped”.

ManynativemobiledevelopmentSDKsprovideawebbrowserwidget(a“webview”)asapartoftheirUIframework(iOSandAndroid,forexample).Inpurelynativeapplications,webviewcontrolsareusedtodisplayHTMLcontenteitherfromaremoteserver,orlocalHTMLpackagedalongwiththenativeapplicationinsomeway.Thenative“wrapper”applicationgeneratedbyPhoneGaploadstheenddeveloper’sHTMLpagesintooneofthesewebviewcontrols,anddisplaystheresultingHTMLastheUIwhentheapplicationislaunched.

IfJavaScriptfilesareincludedinapageloadedbyawebview,thiscodeisevaluatedonthepageasnormal.However,thenativeapplicationwhichcreatesthewebviewisableto(indifferentways,dependingontheplatform)asynchronouslycommunicatewithJavaScriptcoderunninginsideofthewebview.Thistechnologyisusuallyreferredtoas“thebridge”inthecontextofPhoneGaparchitecture-the“bridge”meanssomethingslightlydifferentinTitanium,aswewillseelater.

PhoneGaptakesadvantageofthistocreateaJavaScriptAPIinsideawebviewwhichisabletosendmessagestoandreceivemessagesfromnativecodeinthewrapperapplicationasynchronously.Thewaythebridgelayerisimplementedisdifferentperplatform,butoniOS,whenyoucallforalistofcontacts,yournativemethodinvocationgoesintoaqueueofrequeststobesentoverthebridge.PhoneGapwillthencreateaniframewhichloadsaURIscheme(“gap://”)thatthenativeappisconfiguredtohandle,atwhichpointallthequeuedcommandswillbeexecuted.CommunicationbackintothewebviewisdonebyevaluatingastringofJavaScriptinthecontextofthewebviewfromnativecode.

ThereismuchmoretoPhoneGapthanthat,butthemessagingfromwebviewtonativecodeviathebridgeimplementationisthekeypieceoftechnologywhichallowslocalwebapplicationstocallnativecode.

ExtendingPhoneGap

WritingnativeextensionsforPhoneGaprequiresthatyou:

WriteaJavaScriptinterfaceforyourextensionwhichwillusePhoneGap’sAPItoqueueupmessagestobesenttonativecode.

Registeryourextensionwiththenativeprojectinsomeway-oniOSthisisdoneintheCordova.plistfile.

WritenativecodethatPhoneGapwillrouterequeststofromthewebview,andimplementanynativecodeneeded

Basically,developerscanparticipateinthesameasynchronousmessagingsystemwhichpowersthecorePhoneGapnativeAPIs.

StrengthsofthePhoneGapApproach

Inmyestimation,PhoneGap’sprimaryarchitecturalstrengthisthatitissosmallandsimple.Itdoeswhatitdoes,anditdoesthatwell.ThePhoneGapteamhasintentionallyimplementedonlythelowestcommondenominatorofnativeAPIsforthewebbrowser-basedapp.BecausethenativeAPIsetissosmall,ithasbeenrelativelyeasytoportPhoneGaptomanydifferentenvironments.BasicallyanynativeplatformthatsupportsawebvieworwebruntimecanbeaPhoneGapplatform.

Non-visualnativeextensionsinPhoneGaparealsoverysimple.Therequirementsforregisteringnativecodetoreceivemessagesfromthewebviewareverymodest.Simplenativeextensionscanbedevelopedrapidly.Thisplug-inarchitecturewasalsowellexecutedinmyopinion.

ThereisalsostrengthinthefactthatnativeAPIsandnativeappdevelopmentarealmostcompletelyabstracttotheenddeveloper.AnyonewhocanwriteHTML,CSS,andevenasmallbitofJavaScriptcanwrapupawebpageinanativeappanddistributeitassuch.ThebarriertoentryinusingPhoneGaptopackagewebpagesasnativeappsisextremelylow.

WeaknessesofthePhoneGapApproach

ThequalityoftheuserinterfaceinaPhoneGapapplicationwillvarybasedonthequalityofthewebviewandrenderingengineontheplatform.TheWebkit-basedrenderingengineoniOSisstrong,andprovidesthebestperformance.TheAndroidwebviewisfunctional,buthassomenotablelimitations.Onotherplatforms,thewebviewperformancecanbesuspectdependingontheOSversion.

Therearealsothestandardcross-browserissueswebdevelopershavealwayshadtodealwith.UIswillneedtoemployprogressiveenhancement,mediaqueries,andthatentirebagoftrickstoremainusableonmultipleplatforms.IthelpsthatmanymobileplatformsareadoptingWebkit,buttherearestillsignificantdifferenceseveninWebkitbasedenvironments.

Mobilebrowsersaregettingbetterallthetime,whichwillhelpmitigatethoseproblems.Butapproachingnative-qualityUIperformanceinthebrowserisanon-trivialtask-Senchaemploysalargeteamofwebprogrammingexpertsdedicatedfull-timetosolvingthisproblem.Evenso,onmostplatforms,inmostbrowserstoday,reachingnative-qualityUIperformanceandresponsivenessissimplynotpossible,evenwithaframeworkasadvancedasSenchaTouch.Isthebrowseralready“goodenough”though?Itdependsonyourrequirementsandsensibilities,butitisunquestionablylessgoodthannativeUI.Sometimesmuchworse,dependingonthebrowser.

PhoneGapalsocannotbeextendedwithnativeuserinterface.Theenddeveloper’sapplicationitsselflivesinsideawebview,anduserinterfaceisrenderedinHTML.OnecanmessagetonativecodeandcreatenativeUIthatgoeson,over,above,oradjacenttothewebview,butit’sdifficultorimpossibletointegrateadynamic,HTMLDOM-basedUIwithnativeUIcomponents.Appceleratorwouldknow-wetriedtoassociatenativeUIwithDOMelementsearlyon,andneededtoscrapthateffortastheresultswereunpredictableandofinsufficientquality.

Thereisalsotheotheredgeofthe“lowestcommondenominator”sword.VeryfewnativeAPIsareexposedtoPhoneGapapplicationsbydefault,whichmakesplatformintegrationlimited.Thereareavarietyofplug-insthatexisttoplugsomeoftheseholes,butinmypersonalexperiencetheyhavevariedinqualityandmaintenance.Thiscouldverywellcontinuetoimproveovertimethough-thereisastrongcommunityaroundPhoneGap.

We’lldivemoreintothephilosophicalaspectsofPhoneGapsoon,butlet’sexplorethesesametechnicalareasforTitaniumfirst.

WhatisTitaniumTryingtoAccomplish?

ThegoalofTitaniumMobileistoprovideahighlevel,cross-platformJavaScriptruntimeandAPIformobiledevelopment(todaywesupportiOS,Android,andthebrowser,withBlackBerry10andWindowsPhonecomingsoonandeventually,respectively).TitaniumactuallyhasmoreincommonwithMacRuby/HotCocoa,PHP,ornode.jsthanitdoeswithPhoneGap,AdobeAIR,Corona,orRhomobile.Titaniumisbuiltontwoassertionsaboutmobiledevelopment:

ThereisacoreofmobiledevelopmentAPIswhichcanbenormalizedacrossplatforms.Theseareasshouldbetargetedforcodereuse.

Thereareplatform-specificAPIs,UIconventions,andfeatureswhichdevelopersshouldincorporatewhendevelopingforthatplatform.Platform-specificcodeshouldexistfortheseusecasestoprovidethebestpossibleexperience.

Soforthosereasons,Titaniumisnotanattemptat“writeonce,runeverywhere”.Wethinktherearegreat,user-experienceenhancingfeaturesacrossmultipleplatformsthatdevelopersshouldbeusing.Wethinkthatnativeappsshould,whereappropriate,takeadvantageoffamiliar,high-performancenativeUIwidgets.However,wethinkitisunnecessarythatnativedevelopersneedtolearnplatform-specificAPIstodrawarectangle,ormakeanHTTPrequest.

TitaniumisanattempttoachievecodereusewithaunifiedJavaScriptAPI,withplatform-specificfeaturesandnativeperformancetomeetuserexpectations.WhenyouwriteaTitaniumapplication,youarewritinganativeapplicationinJavaScript.Titaniumshouldbeconsideredaframeworkforwritingnativeapps,versusanabstractionfromtheactualplatformyouaretargeting.

EndUserWorkflow,Tooling,andInterfaceforTitanium

TodevelopnativeapplicationswithTitanium,thedeveloperisrequiredtoinstallthenativetoolchainsforiOSandAndroid.Afterthosetoolsareinstalled,however,thedeveloperusuallyonlyinteractswiththeTitaniumSDK’sscriptinginterface(todayPythonbased).Thisisdoneeitherdirectlythroughthecommandlineor(morecommonly)throughTitaniumStudio,ourEclipse-basedIDE.

UsingtheTitaniumtoolset,youwillgenerateanapplicationprojectdirectorywhichcontainsaconfigurationfile,localizationfiles,andadirectorytocontaintheimages,assets,andJavaScriptsourceyouwillbewritingtopoweryourapplication.Youwillnot,bydefault,beeditingHTMLandCSSfiles,unlessyouintendtocreateahybrid-typeapplicationwhichcontainsbothnativeandHTML-basedUI.Titaniumapplicationscanandoftendoemploya“hybrid”(nativeandweb)UI,likeFacebook’snativeapplicationforinstance.Inthisway,onecouldactuallyimplementPhoneGapwithTitanium,butthat’soutofscopeforthisdiscussion.

Usingthistoolchain,yourapplicationisrunusingtheactualem/simulatorsfortheplatformsyou’retargeting.TitaniumStudioalsoprovidesstep-throughdebugging,codecompletion,andotherIDE-levelfeatures.

Installingtoadevicefortestingisalsotypicallydoneusingourbuildsystem.InStudioweprovideawizardinterfacetoconfigureanycode-signingdependencies,andthenhandlethedeploymentofyourapplicationtoaconnecteddevice.Youcanalsousethenativetoolchainstodeployorpackageyourapplications,ifthatisyourpreference.

Whenitcomestimetoshipyourapplicationtothestores,ourbuildsystemwillhandlethecreationofthefinalapplicationpackagesforyou.Thisisdonelocallyonthedeveloper’smachineusingthenativetoolchains.Theuploadprocesswillbethesameasitisfornative-onlydevelopers.

WhiledevelopingaTitaniumapplication,theunderlyingtoolchainsaremostlyabstract.Theymustbepresentfordevelopment,buttheenddeveloperisrarelyrequiredtousethemdirectly.Thefactthatnativeappsarebeingdeveloped,however,isnotabstract.Userinterfacesarecreatedwithcross-platformANDplatform-specificcomponents,andyourapplicationsshouldbedealingwiththingslikebackgroundservices,localnotifications,appbadges,configuration,activities/intents(onAndroid)…allthingsthatareexposedviatheTitaniumJavaScriptAPI.

HowTitaniumWorks

There’squiteabithappeningbehindthescenesinaTitaniumapplication.Butbasically,atruntime,yourapplicationconsistsofthreemajorcomponents-yourJavaScriptsourcecode(inlinedintoaJavaorObjective-Cfileandcompiledasanencodedstring),theplatform-specificimplementationoftheTitaniumAPIinthenativeprogramminglanguage,andaJavaScriptinterpreterthatwillbeusedtoevaluateyourcodeatruntime(V8(default)orRhinoforAndroid,orJavaScriptCoreforiOS).Exceptinthebrowser,ofcourse,wherethebuilt-inJavaScriptenginewillbeused.

Whenyourapplicationislaunched,aJavaScriptexecutionenvironmentiscreatedinnativecode,andyourapplicationsourcecodeisevaluated.InjectedintotheJavaScriptruntimeenvironmentofyourapplicationiswhatwecall“proxy”objects-basically,aJavaScriptobjectwhichhasapairedobjectinnativecode.Colloquiallywewilloftenreferto“JavaScriptland”and“nativeland”inaTitaniumapplication,astheyarekindofparalleluniversestooneanother.TheproxyobjectexistsbothinJavaScriptlandandnativeland,andservesasthe“bridge”betweenthetwo.

InyourJavaScriptcode,whenyoucallafunctionontheglobalTitaniumorTiobject,suchasvarb=Ti.UI.createButton({title:'PokeMe'});,thatwillinvokeanativemethodthatwillcreateanativeUIobject,andcreatea“proxy”object(b)whichexposespropertiesandmethodsontheunderlyingnativeUIobjecttoJavaScript.

UIcomponents(viewproxies)canbearrangedhierarchicallytocreatecomplexuserinterfaces.Proxyobjectswhichrepresentaninterfacetonon-visualAPIs(likefilesystemI/Oordatabaseaccess)executeinnativecode,andsynchronously(orasynchronouslyforAPIslikenetworkaccess)returnaresulttoJavaScript.

HopefullythishelpsdirectlyaddresstwocommonmisconceptionsaboutTitanium-atnopointdoesTitaniumrequiretheuseofawebviewcomponent.ThedevelopercancreateawebviewasanativeUIwidget,butthewebviewisnotusedtoevaluateTitaniumsourcecode.NorisJavaScriptcodecross-compiledtoObjective-CorJavainTitanium.YourJavaScriptsourceisevaluatedatruntime.

ExtendingTitanium

Titaniumisextensiblewithbothnon-visualandUIcapabilitiesinnativecode.ByimplementingaProxyand/orViewProxyinterfaceinnativecode,developerscancreatenewnativefunctionalityforTitaniumapplicationsexposedinJavaScript.WeexposethesameinterfaceweusetocreateTitanium’sowninternalinterfacetomoduledevelopersbothoniOSandAndroid.

StrengthsoftheTitaniumApproach

SincethegoalofTitaniumistoprovideahigherlevelAPIfornativemobiledevelopmentacrossplatforms,youwillgetaccesstoawidearrayofnativefeaturesandfunctionalityoutofthebox,fromuserinterfacecomponentstosocketinterfacestonotificationsystemintegration.ThegoalofTitaniumistoreducethefunctionalitygapbetweenTitaniumandpurenativeappstosomethingapproachingzero.We’relikelytoneversupportanentireplatform’sAPIoutofthebox,butwewanttocover90%ofthemostcommonusecasesandprovideaplatformwheretheother10%canbeaddedbypeoplethatneedit.

SinceTitaniumcanbeextendedwithvisualcomponentsthatplugintothesameviewhierarchyastherestoftheapplication,you’reableto(ultimately)implementanyuserinterfacethatispossibleontheunderlyingnativeplatform.NeedaTableViewtoscrollat60fpswithspecialnativecode?Youcandothat.WanttoseamlesslyintegrateanOpenGLdrawingsurfaceforagame,andkeepthelogicfortherunloopinJavaScript?Youcandothat.YoucanintegratetheseUIextensionsdirectlyintotherestofyourapplicationbuiltwiththecoreTitaniumAPIs.

ThelookandfeelofaTitaniumapplication,whenusingcommonUIwidgets,isalsoastrengthoftheplatform.Thereisnovisualemulationgoingon(eitherthroughtheapplicationofCSS,orrenderingofUIwidgetsusingOpenGLorFlash).WhenyoucreateaNavigationGroup,itisbackedbyanactualUINavigationControlleroniOS.Theanimationsandbehaviormatchwhatanativeappuserwillexpect,becauseyou’reusingthesameUIcontrol.

SinceTitaniumprovidesahighlevelnativeprogrammingAPIinJavaScript,thebarriertoentryfornativeprogrammingissignificantlyreducedforanyonewhohasusedanECMAScriptbasedlanguage(whichisalotofdevelopers).Atwood’sLawisaliveandwellthroughTitanium.

WeaknessesoftheTitaniumApproach

ThescopeoftheTitaniumAPImakestheadditionofnewplatformsdifficult-implementingtheTitaniumAPIonanewnativeplatformisamassiveundertaking.Forthatreason,theTitaniumplatformisonlyavailableonwhathavebeendeemedthemostcriticalmobileplatformsatpresent:iOS,Android,andtheweb.

OurmobilewebbrowsersupportisnotyetofGAquality-wearecontinuingtoworkontheperformanceandfeelofourUIwidgetset,aswellasroundingouttheimplementationofourcoreTitaniumAPIs.

BecausethelayerofabstractionprovidedbyTitaniumislarge,sub-optimalAPIimplementationsremaininourowninternalframework.Someuserinterfacecomponentsdonotyetperformaswellastheirnativecounterpartsundersomecircumstances,suchasverylargetableviewswithhighlycustomizedlayouts.Optimizingourcoreuserinterfacecomponentsremainstheprimaryengineeringtaskforourteam.Aswefixbugsandhardwareimproves,weareseeingthisbecomelessofanissue.Wealsofindthatinformationarchitecture,especiallyforlargedatasets,needstobeappliedinmanycases.

AlsoowingtotheambitiousnessoftheTitaniumplatform,extendingTitaniumisnon-trivial.AgoodworkingknowledgeofTitanium’sarchitectureandtheenvironmentisnecessarytoeffectivelyintegrateanewnativecontrolorAPI.Thedeveloperexperience,APIdocs,andhighlevelguidesformoduledeveloperswereimprovedalotwithourlatest2.0release,butremainanareaoffocusforus.

PhilosophicalDifferences

Bynow,IwouldhopethatthetechnicaldifferencesbetweenPhoneGapandTitaniumareprettyclear.Butbeyondthosedifferences,thegoalsanddirectionofeachprojectaredifferentaswell.ThestatedgoalofthePhoneGapprojectisto,eventually,ceasetoexist.Asstatedearlier,PhoneGapisintendedtobetheleadingimplementationofemergingbrowserstandardsarounddeviceAPIs.Intheory,oncebrowservendorsimplementthefeaturesofPhoneGap,theplatformwillnolongerbenecessary.PhoneGapitsselfisn’tintendedtobeaplatform-it’sashimtoaddnativeapp-likefunctionalitytowebapplications.Thewebisintendedtobetheplatform.

PhoneGap’snewsponsoringorganization,Adobe,isalsoverymuchinterestedintheadvancementofthewebasaplatform.Inrecentmonths,AdobehasbeenaggressivelybuildingouttoolstoenablethedevelopmentofHTML5/CSS3webapplications.Itseemsobvioustome(andmanyothers)thatAdobeseesadiminishingroleforFlashasstandardwebtechnologiesevolve.

Atit’score,Adobeisatoolsbusiness.PlatformsareachannelthroughwhichAdobecanselltools.Once,thatplatformwasFlash.Now,thatplatformisthewebbrowser(inadditiontoFlash).Idon’tknowpreciselyhowPhoneGapfactorsintoAdobe’sproductroadmap,butinalotofwaysitservesasimilarpurposeasFlash.PhoneGapisanattempttocreateanabstractruntimeenvironmenttoenablecross-platformdeployment.

IfAdobecanselltoolstodevelopfortheweb,andthewebcanbeusedtodevelopmoretypesofapplications,thenthat’saclearwinforAdobe.Whichisfine,bytheway-nothingwrongwithsellingtools.

It’sworthnoting,however,thatAdobeisnotthegoverningbodyoftheCordovaproject,onwhichPhoneGapisnowbased.ThatprojectisownedandgovernedbytheApacheSoftwareFoundation.Itremainstobeseenwhattheinterplayisgoingtobebetweenthetwoprojects,butmygutinstinctisthattheywon’tdivergemuch.Ithinktheirgoalswillremainphilosophicallyaligned.

Appceleratorisalsointerestedinandsupportiveoftheadvancementofthewebasaplatform.Everyonewinswhenthewebgetsstrongerasanapplicationplatform.Thedifferenceisthatweviewthewebasonegreatplatformamongothers,withauniquecharacterandsetofstrengthsandweaknesses.Wedon’texpectthewebtobecometheonlymobileapplicationplatform.WethinkthatplatformslikeiOS,Android,BlackBerry,WindowsPhone,andthelikewillcontinuetobeinfluential,andwillprovidegreatexperiencesforusers.Thatchoiceandcompetitionwillbeagoodthingforconsumers,butwillremainaproblemfordevelopers.

WhatweexpecttoprovidefordevelopersthroughTitaniumisawaytotargetthewebandnativeplatformsfromasinglecodebase,whileretainingthefeatures,performance,andtightplatformintegrationthattheusersofthatplatformexpect.Weexpecttobuildanenduringplatformformobileclientdevelopment,withservicesandtoolstospeedupthatprocess.Wearenotatoolscompany-weareaplatformcompany,andoursuccesswillbelinkedtothesuccessofdevelopersontopofourplatform.Overtime,wehopetobuildanopensourceplatformcompanyinthespiritofRedHatandothergiantsinthatspace.

Whichtoolorapproachisrightforyou?Likeallthingsinsoftwaredevelopment,itdepends.Therearenosilverbullets.Buthopefullythisdescriptionandcomparisonwillhelpyoumaketherightchoiceforyoursituation.