WWDC2000 Session 123

Transcript

Kind: captions Language: en in this session I'm going to do a quick review of what carbon is and why it's important we're going to go more into detail about the transition process and what it takes to get your application carbonized and then we'll talk about some of the development options that you faced with tools and platforms and debugging so what is carbon we'll simply put its API that you can write to in the mac OS toolbox so that your application will run on the eight one through ten if scott forstall pointed out on monday carbon is a living organism as Apple is reviewing the api's developer feedback is very important and it has made a severe impact severe that sounds bad a great impact on some of the decisions that Apple has made about whether to keep or remove api's some api's are have to be removed because they just simply wouldn't work in a modern operating system environment and some because our evaluation of how much they're being used would indicate that we should no longer support it but developer feedback is often made an impact on those decisions so this mailing list is self subscribe and if you go ahead and add yourself to that and begin discussing with other developers and Apple employees there on this mailing list your feedback will definitely be incorporated so why carbon well I think before we talk about why carbon we have to review why Mac os10 and if Scott also pointed out on Monday Mac os10 is bringing a lot to the mac OS platform but simply isn't there enough with mac OS 8 and 9 right now and those things are stability because of protected memory performance and responsiveness because of pre-emptive multitasking aqua which is just an amazing user experience you've all seen that a virtually unlimited memory no more finder panels and we're having to close your app open the panel guess the right number and relaunch your app an application packaging which is delivering multiple languages without having to install a different version of the app or a different version of the OS and simple I'll incorporated into a folder but to the user it looks like one finder item so now back to why carbon all those great things are coming to us because of Mac OS 10 but all the applications that the users are using for productivity are on 89 and that's where carbon comes into play carbon is Apple's answer to how we're going to incorporate these two great environments Mac OS eight and nine applications which are so many and Mac OS 10 bringing the modern operating system environment gives us a great user experience on a robust platform so the transition process it's pretty straightforward I actually prefer to call it a tune-up process I was reviewing some of the documentation we have and I like this term better because I think it's more accurate tuneup is a you know kind of getting in shape just parts of your app that need to be changed a little bit to work better in a modern operating system environment like Mac os10 so the first thing you're going to want to do is use carbon dater I'm going to go into all of this in more detail that I just wanted to give an overview of the process carbon data is a tool that Apple has made so that you can preview required changes that are going to be coming to your application before you really start a lot of the work then you're going to want to download the carbon live SDK which has pretty much everything you'll need to get going and then you start the tune up whoa here we go fixing compiler errors using alternative or modified api's for those that are no longer supported and you're going to link against carbon step then you're going to run on mac OS 9 which is cool but as my car sia from Cork said on Monday when you run on mac OS 10 it's really fun it really is so carbon data like I said allows you to preview require changes it's very simple you download a tool you drag your app onto it carbon date or spit out a file you mail that to Apple at an email address that's specified in the documentation and in about an hour you get back an HTML report that gives you a detail of the api's you're using that our unsupported or modified so this was mine I came into developer relations last summer and before that I was working on a project in engineering I don't know if any of you have had the chance to see a new Macintosh boot in the past nine months but it starts playing a flashy movie and then allows the user to register and get an internet account have any of you seen that I don't know yeah okay cool that was my engineering project I was working on the user experience side another great guy was working on the backend the internet and registration side so uh anyway when I was coming developer relations I wanted to get a really good feel for the experience of developers were having so I emailed the application to carbon dater and this was a sample of the report that came back so as you can see ninety percent of the api's that i was using were just supported that's actually a low number I think it's because I was a system software engineer so we use API is that I don't know aren't always supported or at least publicly available so your application will probably report a much higher number for supported api's eight percent were unsupported and a small percentage or either modified or not recommended which means in a while they would be unsupported so after you kind of get a feel for the changes that are going to be made go ahead and download the carbon live SDK the contents of it are the carbon porting guide really the carbon porting guide is going to be your major guide through this whole process it's a much deeper in-depth discussion of the kind of stuff I'm talking about today you'll get the latest universal interfaces which you'll need to keep up with the api's that are constantly being reviewed and set for carbon a lot of the api's are still being reviewed as to whether we will permanently support them and then you're going to link against to one of two stubs and I'll explain the difference between those in a few minutes there's the carbon live extension so that you can run your software on mac OS 8 or 9 documentation and sample code so with this stuff you're all set you're ready to go there are currently two SDKs for carbon live shipping carbon live 104 has gone GM and is available via download from apple software update mechanism and it's available on our developer site on the public area development kits and carbon live 11 is currently under development and being seated about every two weeks and you can get that from your Apple Developer connection count once you login just click download software and go to the carbon lives section and the carbon leg 11 s2k will be there for carbon lives I'm actually going to be going into depth about that much more tomorrow Thursday in the Civic Center at five so if you want to learn more about carbon live in carbon on mac OS 8 & 9 please be sure to attend that session so the very very first step about carbonizing your application has to do a 68 k code there's just none so there's no 68k code involved with mac OS 10 or carbon applications and that's all I got to say about that so so the next step once you're there ready you're ready you're set go you waive this big flag target API Mac carbon so I got to say that in the first you're going to hate this flag because if I could say that Universal interface has had a mood when you turn this flag on they get really fussy and when you go to rebuild your application it's just going to start raining compiler errors so perhaps many of you have already experienced this but the good news is that they're so easy to fix I got to be honest they're so tedious but ending on the good note they're so easy so it's just a lot of grunt work and in some kitchens that we had during the past nine months I've seen developers show up with just you know agony as they see the number of compiler errors coming in they projected like two weeks you know which the kitchen was only running a week and we just thought alright well go for it and call me when it's up on ten or whatever I don't know but two days later you know they were all done so it goes a lot faster than most people think so what are these compiler errors well scott forstall referred to them on monday most of them are coming from the fact that we've made the toolbox data structures opaque we've kind of kicked you guys out of touching them directly but that's such a good thing because now Apple can keep moving the OS forward and not break your applications every time we have to change something in there it also allows us to add re-entrance e to the toolbox for thread safety the other type of air is the generic universal proc pointers are no longer supported each tool box manager now has specifically typed upp s so to take a deeper look at some of those graph ports and friends are the most common errors that you'll see a mac OS 9 a dialogue is a window is a graph planner and we all know that we're so used to casting those and using them as such but I'll Mac os10 they are not and therefore carbon they're not so in order to do that you need to use casting functions and these are a sample of a lot of the casting functions or even just access or functions are available in Universal interfaces if you want to get the field from a record the convention is get record field so get window port or get dialog window for a specific real objects not just a field of an object but of ports and windows you can if you have that you can get the containing record by using the convention get window from port or get dialogue from window so these conventions are followed throughout these universal interfaces when you're looking for that access or function keep this in mind so there's an example in the top line we see what we've all been using today we want to get the left field of a bounding box of a region and so we just dereference the region and access to field directly but in carbon you can see what it becomes you have to use the access or get region bound and passed it a variable in which it's going to fill out the wrecked with the value of the bound it also returns a pointer to your variable just so you can then immediately start accessing it and as you can see there so there is some good news I don't know why I think I was tired when i wrote this slide with there's good news Rex are not opaque ok so I just can't even imagine the number of compiler errors that we were beginning if we had made Rex opaque so I know all right Universal proc pointers why do we still have them well as you know they came into being when we started having to kind of run time architectures powerpc and 68 k and we still do with mac OS 10 we have a CFM which is familiar to all of us with Mac us 89 but when we brought in the OS that Mac OS 10 is built on mocco was its native runtime a native runtime and we still support those two run times so universal proc pointers are there to help us but the generic routines new routine descriptor and disposed routine descriptor are gone and you have to use specific ones from the toolbox manager so here's an example as you can see in the top one we're using a new routine descriptor and disposed routine descriptor but now if you were to look in the universal interfaces you'd see these api's new control action upp and dispose control action upp that's an example of a specifically type of access or upp function that you need to use from a toolbox manager so one important thing that I wanted to be honest about is that carbon data does not necessarily report these types of compiler errors so I had one developer come up to me and today carbonator said I only had to change 8ap eyes and I was like oh because when he turned on the flag he of course started getting these other types of compiler errors that are involved with carbonizing your applications so so now we're going to kind of go down the road that we've all been traveling to get a mac OS 8 or 9 application on board we're going to see that some of the roads are closed and we have detours and i'm just going to review some of the highlights once that i have seen specifically impact developers in the past year again use your carbon porting guide for an in-depth coverage of pretty much all of the gotchas that we know about at this time the biggest one that I've seen hit people is that the window manager port is no longer supported so you cannot draw globally to the screen we do have some detours for window dragging and resizing carbon events is supported you as carbon events ends your window handler messages you can go ahead and grab the event modify some parameters in the system will begin respecting those so if you wanted to snap drag the window or do constrained resizing I go ahead and use carbon events for other types of specific drag the drag manager meet your needs we really do want you to send us feedback though if your apps using the window manager port in a way that we're not providing a workaround for at this time in our analysis of the way that developers have been using the window manager port we don't see a compelling need to re-enable that type of user interface capability or mechanism for you so far the cases that we have seen do not fall within the Macintosh human interface guidelines and there are an alternative to those cases that we've seen so we're not going to be providing a generic workaround for this mechanism again if you want to give us you back join that mailing list and just send it there the trap manager so patching is completely unsupported within carbon and Mac OS 10 and it's works against ability and it was 68 k specific so the new message is that carbon events within an application is providing a great way to modify the behavior of the system in a very sanctioned easy way and for other things we're providing hooks within the AP is that we're not there before so the message is that if you were using patching for something actually on the mailing list or to me please just send the highest level goal that you've been trying to achieve with patching and we'll see if we can go ahead and incorporate a sanctioned official api's within the OS that you can use to get that going because generic patching is no longer supported help Apple guide manager is unsupported and balloon health is unsupported so you may find these things just automatically being respected on Mac OS 8 and 9 because those technologies are still there but on Mac OS 10 they're not so the alternative is to use Apple help viewer instead and choose Apple help tags one thing to note is that Apple healthier was not brought back to mac OS 81 in carbon live and so you have to launch your HTML help in a browser printing there's a new printing architecture in carbon but the api's are so similar that it's almost a one for one copy of a name change for your transition so pretty it's really easy game sprockets I'm just going to touch on this there are sessions about gaming in this conference so but draw sprockets are going to be supported post ep 4 so they're not there yet input sprockets on Mac OS 10 the hidden manager is replacing this and will be available to carbon applications for api's you don't have to go down into the Mokka layer and access of api is on 10 nets rockets we've open sourced so if you still want to continue using the functionality of nets rocket you can go get the source code and incorporate that directly into your application and a Mac os10 sound sprocket is being replaced by core audio I think the input sprocket and sound sprocket sessions are still coming within the week so be sure to attend those abuse affects you networking open transport has changed slightly so Mac TCP is not supported within carbon and open transport basic changes that when you initialize open transport at the beginning of your application you now get back a context rest and now you just start passing that context dress is the first parameter to open transport api's now it's pretty much the gist of the change so it's very easy and appletalk api's are not available in the carbon API set so if you are using those you should move over to open transport what the stacks are still there the technology providing that type of networking is still on 8 9 and 10 and if you wanted to go ahead and access those appletalk api's on 10 they are actually available in the appletalk framework on 10 they're just not made available through the carbon API layer 2 carbon applications this has been said many times but threads in carbon are going to remain cooperative if you've been using thread manager threads if you want pre-emptive threads go ahead and use the multiprocessing api and many people ask what about P threads so it's important to know that carbon MP threads are pretty much sorry MP throws are pretty much P threads on Mac os10 and Pete Rose so plugins in carbon on plugins must be carbonized to work with your carbon application on 10 on Mac OS 8 and 9 a carbon application can load and run a non carbonized plugin because the code fragments are prepared separately but on 10 of course all software must be carbonized other a lot of common memory management architectures use zones for handling the memory of their plugins on 89 that's still available so that'll work but zones are not a concept on Mac OS 10 and so that type of memory architecture would not work for plugins on Mac OS 10 CF plug-in and CF bundle are two classes that we're providing within the core foundation a new set of API is available to carbon developers and those sessions are coming right after this and starting this afternoon these are actually talked about in the advanced session of core foundations who have this affects you I encourage you to go to those sessions so not all ap is that control stuff on Mac OS 8 or 9 or mac OS 10 can be brought up to the carbon layer through one API and that's mostly because of the nature of the api's they just simply behave differently on Mac OS 8 or 9 and Mac OS 10 and accomplishing these purposes is not the most pleasant thing for carbon developers so before we go in till we provided you this pretty picture of a fork in the road because that's we're about to be we're about to fork in the road so I let this picture in and get in a good mood so we'll talk about this as I said not all api's can be brought up to carbon applications at that time you have to begin and branch and use OS specific api's so the basic way that you do that is you factor all of your code that is carbonized up into your application in fact all of your code that will either run on eight or nine or on ten down into shared libraries and then you load those as a pro as a plug-in when you're running on the relevant platform the two biggest ones well the first one is hardware interfaces hardware access is simply OS specific and therefore it's not part of carbon the scuzzy manager will be partially supported that's mostly to support scanners and so for other hardware devices on Mac OS 8 and 9 you'll continue using the device manager the comms toolbox and on Mac OS 10 you'll use io kit for shared memory on Mac let's eight or nine you'll continue to use your current mechanism for our you're doing shared memory new pointers this is a common one also attaching to a shared library that has a global data section is another one and that will work on eight and nine but not on 10 for Mac OS 10 you have to use the POSIX api's again these api's could not be brought up to the carbon applications with one single it works all the time api because the nature of shared memory on the two systems is somewhat different on Mac OS 10 you'll need to use the positive shared memory is and the semaphores for controlling access to those so enough with downsizing I've been talking about all these api's we've taken away or they've modified and as the good news is that carbon is also bringing a lot of new technology to you I'm just going to touch on some highlights their sessions devoted to each of these new things carbon events was yesterday it's an amazing technology that dispatches events directly to your controls and windows within an application completely takes care of a lot of the default functionality that you had to just cut and paste a lot of code in just to get your app to keep doing what it already is doing today that's all been put into the system and default functionality is available it's really easy to override the system handlers you can just stack your own on top of it and override functionality or if you don't want to override specific functionality just keep calling down into the stack and the system handler will take care of that and there are many more features that make development easier timers are one that stand out as one of the greatest things about it that I make your development easier for idle processing an important thing to note about carbon events is that it's not required to port your app to carbon so a lot of people are concerned about that you wouldn't have to do anything with carbon events to get your application as it is over to Mac os10 or carbon however a lot of the new technologies that are being introduced like sheets some printing stuff those are beginning to only be available through carbon events but the good news is that it's all gradual adoption you can install a handler you could install one handler and keep doing everything else via the weight next event ed voz had gone into that in detail yesterday in the carbon event sessions corefoundation is a set of AP is that were factored down out of the frameworks that we had adopted with mac OS 10 original OS from next and now made available to carbon applications in its own framework and it has a lot of services that are good to use Unicode strings for easier localization is available collections arrays and dictionaries things we all reimplement or get from a framework today preferences management there's a class that helps you manage your preferences in via carbon so that they just work on eight nine or ten XML parsing URLs and plugins support and another class that I'm not mentioning here is application packaging the new folder hierarchy and lay out there was a class called CF bundle that acts on your behalf is an abstraction layer to all of the resources and locations of stuff that you've put in your application package and I pretty much CF bundle and the Preferences management class I would go as far as to say that those are kind of required concepts for a carbon application to work well in both environments should just simply need to use those or else when Apple goes to make some change in the future and you're hard coding knowledge when we've provided these abstraction layers you would break so be sure to learn about those and the data browser the long awaited data browser this is a system control for list views it supports the browser column view and hierarchical list view and it's used by many system applications including the finder I think file-sharing Sherlock and now services so there's also a session about that so I'm pointing to these the core foundation basics and advanced sessions are listed here and also the data browser session so if you're interested in any of those technologies please be sure to attend so with carbon the use of link have been a link against a bunch of stub libraries but with carbon there's just one and its carbon stub to no longer interface live appearance live quicktime live one sub library on the CD that you receive this week nine in a carpet of em if any of you have been already using carbon live SDK this is the replacement the carbon live of library and the region that we did this because at this time carbon live feeds our little behind on some EP is the main with carbon events so the api's for carbon a Mac os10 are a little further along and a lot of developers were wanting to get right away so if you're going to use carbon events you go ahead and use carbon sub 10 link against it and run your application on 10 if you're in on nine you would get linkers but if you want to just keep right now developing online go ahead and use carbon step 9 and be you can go ahead and use the carbon events api's they're pretty much going to just be name changes only so let's talk about development options you have a couple decisions using you as you proceed into all of the carbon work there are two right times that you'll need to consider and think about tools and bugging techniques the first decision is CFM versus ma co so there are pros and cons to each CFM you will get to have a little executable that will run on mac OS 8 9 10 9 also plugin architectures of it just it will probably just work the drawback CFM is that you have limited access to Mac os10 native services such as the ones I already talked about and that's when you have to begin doing the factoring your shared libraries and loading them as plugins for Makka if you were a macho applica carbon macco application running a mac OS 10 these guys available and just be available to your application you don't have to do the factor and load the plug-in but you would be leaving necklace 89 pine because that runtime is not available on those platforms so those are things to think about as you go ahead and decide what you're going to do for your carbon application delivery development tools so Apple has just this week announced our new project builder and interface builder has been there these are advanced tools for kind of a next generation experience of developing your application they all and they do support carbon targets a lot of news is coming out this week about these tools can do and everything so I'm going to touch on these and recommend you go to those because they're just reporting a lot of changes and updates that they're making speaking future functionality of the same thing to support and of course miss Burge development tools codewarrior and power plant our support carbon at five on 2.1 and where your pro 6 is the release going on right now code we will five also carving development pretty well let's see so step one is usually you call your compiler changes you modify API and you want to bring up the app usually developers go ahead and try starting it up on Twitter night with carbon life they get to see on the flat one platform and just keep fixing bugs there until it's going and then they usually switch and start bringing it over to Mac os10 and I'm starting to like guess a number of things up in the kitchens when developers finished carbonizing applications on eight and nine now they kind of get the deer with that life's look when we say well why don't you try to bring it up on ten because I just I don't know it's and I've i would say that we regularly things about three to seven hips that's what i call them we try to wrap up on ten bugs a distance of one eight or nine the good news is that as for tron and scott alluded to earlier this week carbon on a quest 10 is developer complete and by that we mean it's a very stable environment providing almost all functionality that you need carbonate your applications more and more now when developers are being their application up on 10 the hiccups that i was talking about are actually in your code instead of ours which was not the case at the beginning the most common one of course is memory access so you will not believe how many writing two nulls have been existing in your applications a 29 all this time until you run it on 10 so the other alternative is to do all development on Mac os10 I'm project builder and interface builder or native tools to 10 the performance tools for ma co are excellent and gdb the natives bugger mac OS 10 provides a you buy through project builder for this legging experience so like I said the tools experience is changing a lot even this week as the developers are making their announcements in the past right now the common experience has been that we bring your application / 10 you've had to do two min debug you have your 8 & 9 machine you move up over to 10 code warriors debugger would talk over the network to Gd and GP would feedback information and you'd pretty much to have your code war experience however because of this a lot of times when the app crashed on 10 codewarrior would not really be able to come through and report the errors that you were seeing and then you'd have to move over to the 10 box launch your application with gdb see where it crashed and get a back trace and that's actually a very reliable way to find out at least where your application is crap crashing and then after that developers would usually then go back to the 89 machine and step towards that place where they know their app was crashing so that they could view the variables and parameters in codewarrior because gdb again a lot of announcements are being made this week but at that time gdb could not show you the values of variables and parameters for a CFM application built with codewarrior so that that was kind of why that process is existing but again a lot of this is changing so a bonus of getting your application over to Mac OS 10 is that our experience from developers and that they're finding bugs faster like I said memory exception or the main 1i have a true story friend of mine works at a company and they had a contractor on board doing they have a contractor on board doing their carbon work and he kept saying to them you should get your application on 10 as soon as possible you know well of course we should so but he knew what he was talking about he knew the benefit that would come so after a while they got it up on 10 and they kind of started realizing wow Mac os10 reveals a lot of stuff a lot faster than mac OS 8 or 9 did and they typically were looking for this one bug it was a memory bug and I think that they were anticipating you know how like after while you to start getting a feel for how much time you know that you're going to be spending on this bug and their estimate was two hours and you know the contractor reminded them try it on 10 I think they found in 15 minutes so again you know getting your application on 210 as soon as possible we'll start a lot of time saving for this and make your 89 code a lot more robust too so the tool sessions this week the first one already occurred so I'm just pointing it out to let you know and I hope you were able to make it to that to hear the announcements right after this is a session called transitioning to the new project builder because you're in this room you're missing the first one which is introduction to project builder the my understanding is that this session is actually targeted towards developers who are used to the code warrior experience and want to understand project or better and then last week I cannot stress enough session 96 debugging your applications on the West End do not miss session so the car porting I desire carbon live is there in your application of 18 and 9 has been there the part where we've most had to help developers with kind of just hand holding attention is getting their app up on 10 it's where they hit the hiccups and it's where you need to learn its new techniques so please don't miss that session like I said once you've got all that going you're going to be running your application on 8 and 9 fun part is running a mac-10 there are some fun time issues to think about the first one is alone because the carbon api's are included all in one set that doesn't mean that all those AP is and their implementation are available on every version of the OS but that's how it is already today so for example if you using nav services on Mac OS 81 new a new AP eyes were introduced to it in one on 85 but that's I mean I'll sudden those AP eyes are available i want so what we're all used to do with your style check to make sure that this version of a technology is running indeed on this big machine that you're running and that's true with carbon so all the api's are kind of one big set she's allowed to be runtime checks to make sure those api's are available on the machine that you're running this kind of a picture of Scott for showed this on Monday I'm carbon is a living growing thing and as you can see more and more api's be kind of global with each release of the OS and is through carbon exposes those API through your carbon applications when we're running on e OS that supports the API and also the good news about carbon is that we are indeed bringing back I made some technologies back like carbon events to corporation a card printing data browser another issue to think about when you're running a carbon application is memory so one binary but running in two very different environments concerning memory on that tenant application as virtually unlimited memory you should use this result to make sure the memory environment you're running it and be careful when using freeing them one common technique developers I know of you because they call from them and allocate the rest of their apps heap space and it's kind of doing custom memory management and of course you can see would not want to do that mac OS 10 if you want to grab four gigabytes and manage it yourself but i can guarantee performance will change mac OS 10 growth and prox are not hot again really because the unnecessary with four gigabytes of adverse fate application never answer Ruis memory so that the system can keep going and i've already mentioned on that end zones are not supported so I would be when i wrote this slide and i was thinking i can't put that up favorite be too easy so what does that mean what that means is that a carbon application its sleep time that passed away next event is fully supported now it's not like you sleep but getting all events in interim that's just not way to idle time anymore you should fully use custom a custom mechanism have your own if you're going to be using carbon 1 dot 0 dot two three or four we won one that I was before or carbon events timers if you're using carbon live 11 or mac OS 10 that's the way to get a appropriate way to get idle time for your application so some of you because of this are going to be tempted to lower your sleep values down so that you can keep getting time back on the processor that is not recommended and we really do want you to switch to these other mechanisms we're hoping that all of you will be able to switch to passing the constant for the longest sleep time to wait next event because otherwise your application just keeps requesting time that doesn't necessarily always need and in the new preemptive environment on Mac OS 10 and even on Mac OS eight or nine we don't want to be seen that happen so I wanted to point out one sample scenario that we had experienced that revealed the nature of this change in carbon a one developer when they launched their aplicar when they pull down there a bow box they started scrolling the credits and stuff and then they stopped when they brought the dapple we were just all so like what's that but it turns out that indeed this application was using or counting on Knoll events to do idle time processing to scroll the text in the about box the interesting thing is that if you started moving the mouse the text is started scrolling normally but that's because the app started receiving Mouse moved events so that's kind of a symptom that you should keep in mind when you're trying to look out for the nature of this change with carbon apps we haven't confirmed this yet but another developer was complaining about slower processing of a lot of data in the application and we're suspecting that this might also be the problem if they're using are counting on Knoll events to get a processing time for this huge calculation they're doing this would not work that wouldn't work for them that way anymore so a couple sessions that I want to point out carbon Mackle eight or nine we'll talk about a few more run time issues that your Apple experience working on 8 and 9 and 7 130 carbons the level is a really important session to learn about some time issues that will affect your carbon application when running on Mac OS 10 so i would really stress that you make it to that session and it's a friday of five and in this room and I got a lot of flack for scheduling at that time so you all have to come or else I'm going to get it so now I'm just kidding Cleta it's it's really critical information as stuff that I'm not going into here because it's going to be a nap session so carbon magic we mean by that and it's really true well like said in the kitchens and just me into a lot of developers you know kind of gets looking at let me get this straight you're telling me that if I modify my source code in some appropriate way Apple is going to be able to swap out an entire OS from underneath my applications swap in a completely new one and I'm just going to work it sounds well magic is a strong word but it was the one that stuck out in my mind that this person had used and the good news is that with confidence I get to say yes really and I'm not just saying this based on speculation I'm saying it from experience in some kitchens that we've had and a lot of the demos that you saw earlier this week applications are just coming up on ten after they do their carbon work like I said traditionally there about three to seven hiccups and it's really fun to watch the developers face you know because they're just oh my gosh you know like here comes up on Mac OS 10 and when I first yeah I started this job last summer we had a kitchen in October and I remember the first time you know a major application came up on Mac OS 10 and I was standing there you know I believed in this technology we've seen it working internally at Apple but you know use bringing developers and I don't know their source code I don't know all this stuff they've been doing and the developer has finished carbonizing and we're bringing over to 10 and they had a couple of hiccups and then it just started coming up on ten and I remember my reaction I was like oh my gosh you know and then of course I had to switch to apple and go oh of course yeah that's tough you know of course that would work you know but anyway over time with experience I'd see developers would that look on their face the second time I think I was like why I'm pretty sure you know because I just had that experience but now developers come in and without any hesitation that that happens just over and over and over again and so it's magic it's well it's true it really works so if you want to get more information about carbon please be sure to see our website developer apple com if you go to the mac OS 10 section underneath that is a carbon section there pointer to the sdk and documentation there you also directly to the documentation via text hubs carbon us to complete a carbon porting guide intera mentioned comes in the SDK another important resource to keep in mind is to carbon specification that is on the web but that is a comprehensive list of API zinc urban you guys will be reviewed at this time so if you go to the website and you see an API that's undervaluation that means that we're still going through API reviews making sure that those api's will work in all the environments that a carbon application will exist in like a modern OS preemptive environment thread safety and of if so the API will be approved and you'll see that changed is supported but the thing to keep in mind is that those API is that our mark is still under evaluation we are not we're not committing to support those so you just need to know that if you're going to go ahead and use those that label could at some point change the unsupported who've been providing workarounds and alternatives I just wanted to be clear about what that label means on the spec Scott mentioned this on Monday but I just wanted to mention it again if you go to this website developer apple com go to the marketing section programs carbon we have about five right now five consulting firms that are providing services to just port your application so if resources are an issue and I know they are in this industry and you need to get your application ported please be sure to visit this website for those services a couple other sessions that I wanted to point you to our the high-level toolbox carbon enhancements one and two they're also going to go into the types of changes that i was discussing today but specific to high-level full box so be sure to do those i'm not going to guess a percentage number i don't think at times a very large percentage of the compiler errors and changes that carbon development experience from the high-level toolbox so be sure to attend these sessions cut a critical information you want to know as you perceive carbonating your application so at this time we're going to move into QA and i'd like to ask the panelists to come up on stage