{"id":235,"date":"2006-08-11T11:56:48","date_gmt":"2006-08-11T11:56:48","guid":{"rendered":"http:\/\/neosmart.net\/blog\/archives\/235"},"modified":"2013-08-26T18:10:19","modified_gmt":"2013-08-26T23:10:19","slug":"is-net-taking-over-the-world","status":"publish","type":"post","link":"https:\/\/neosmart.net\/blog\/is-net-taking-over-the-world\/","title":{"rendered":"Is .NET Taking Over the World?"},"content":{"rendered":"<p>4 short years ago, Microsoft unveiled its new framework\/engine for programming and running applications in a virtual environment, and the world was stunned. Microsoft had introduced a run-time environment that was for the first time a true \u201cWrite once, run everywhere\u201d implementation, but that was far from being the end. <a title=\".NET 3.0 RTM\" href=\"https:\/\/neosmart.net\/blog\/a-separate-net-30-and-what-it-means\/\" rel=\"follow\">With .NET 3.0 on the loom<\/a>, NeoSmart Technologies takes a look at how far .NET has come and just how long it can keep going.\n<\/p>\n<p>Besides being a true virtual machine implementation that really does work everywhere no matter how terrible your code is, .NET is paving the way for&nbsp;a revolution that\u2019ll end with it either dead or the only language worth using.. and from what we see, it sure isn\u2019t the first!\n<\/p>\n<p><strong>Update:<\/strong> Once you\u2019re done reading, <a href=\"https:\/\/neosmart.net\/blog\/is-net-taking-over-the-world\/\" rel=\"follow\">here\u2019s a follow-up<\/a> that should clear some things up.\n<\/p>\n<p><!--more--><\/p>\n<p><strong>Globability<\/strong>\n<\/p>\n<p>In the past week, .NET has made several huge steps that bring it a lot closer to truly taking over the world. Following the July 27th release of RC1 for <a href=\"http:\/\/ironpython.codeplex.com\/\" rel=\"follow\">IronPython 1.0<\/a> at Microsoft\u2019s CodePlex which allows for complete Python-powered applications to tap right into the .NET platform and it\u2019s powerful resources with little to no code changes. IronPython is much more \u201cjust another language ported to .NET,\u201d rather IronPython was the first domino to fall, a gateway to .NET globability.\n<\/p>\n<p>Python is special. It\u2019s a \u201chard-core\u201d language that puts the programmer in the front-seat, but more importantly, it\u2019s a dynamically typed language, and a preview of what\u2019s to come. The old arguments that .NET would fail because of it\u2019s insistence on strong static types and nominative structure just wouldn\u2019t appeal to certain users was no longer valid \u2013 for IronPython is the very opposite of the \u201ctraditional\u201d (C# or VB.NET) application.\n<\/p>\n<p><em>So .NET can run on non-type-safe languages \u2013 but what does that mean?<\/em> Besides the obvious \u201ceasier to code, less troublesome\u201d applications, it means that .NET is now ready to go past the desktop. The .NET Framework was tied strictly to the desktop platform by its need for pre-compiled applications and static languages, but all that is about to change. Drastically.\n<\/p>\n<p>Following the release of IronPython\u2019s RC, just days ago, Queensland University made its own <a href=\"http:\/\/www.website-unavailable.com\/?wc=EWJsGw9mBhlGGxZwDhYCEx8=&amp;url=plas%2Efit%2Equt%2Eedu%2Eau%2FRuby%2ENET\" rel=\"follow\">Ruby.NET compiler<\/a> public, and with it, the age of the dynamic languages powered by .NET officially began. Ruby may be famous for it\u2019s AJAX &amp; Web 2.0 influence and its popularity with the in-crowd today, but as a .NET implementation, it means a lot more than that. Ruby is a dynamic language.\n<\/p>\n<p>While Ruby.NET isn\u2019t a pure dynamic language, it certainly is a step in the right direction \u2013 especially with Microsoft nearing the final 2.0 release of <a href=\"http:\/\/phalanger.codeplex.com\/\" rel=\"follow\">Phalanger<\/a> (PHP.NET). Phlanger is complied PHP with complete access to the .NET Framework and it\u2019s enormous resources and functions libraries.\n<\/p>\n<p><em>Alright, .NET supports dynamic languages. Almost every major \u201cbig name\u201d language has been ported to .NET, and many of those can be re-compiled as .NET CLRs without touching a line of code.. but if .NET isn\u2019t perfect, who cares?<\/em> Read on!\n<\/p>\n<p><!--nextpage--><\/p>\n<p><strong>.NET Powered Revolution<\/strong>\n<\/p>\n<p><em>So what makes .NET better than Java?<\/em> <em>After all, Java can do all that.. can\u2019t it? <\/em><br \/>\n  <br \/>As a matter of fact, it can\u2019t. Microsoft\u2019s .NET surpassed Java in power, usability, and functionality long ago, and here\u2019s why.\n<\/p>\n<ul>\n<li><em>The Engine Takes Care of Everything<br \/>\n  <br \/><\/em>Everyone knows Java\u2019s motto: \u201cWrite once, test everywhere.\u201d Microsoft promised their own .NET Framework wouldn\u2019t fall into that trap. As such, Microsoft (and the Mono developers for Linux\/Mac) take it on themselves to provide true 100% cross-compatibility for any and all code. As a dev, your job is to write the code, and Microsoft\u2019s job is to make sure it runs. That simple. <\/li>\n<li><em>Technology at the Fingertips<br \/>\n  <br \/><\/em>Technology changes at break-neck speeds, and if you don\u2019t keep up with it, you\u2019ll certainly fall off the band-wagon faster than you can say \u2018Ow!\u2019 But with .NET you needn\u2019t worry about code-compatibility. If there\u2019s an update to the network stack code &amp; libraries, you don\u2019t have to edit your code. Ever. The engine dynamically updates your MSIL compiled code to use the latest and greatest available technologies at no cost to your code. <\/li>\n<li><em>Stable Coding Platform<br \/>\n  <br \/><\/em>.NET provides a stable coding platform no matter what system you\u2019re writing for. The best example is Windows Vista \u2013 native code broke left and right because Vista wasn\u2019t ready and its libraries were constantly changing, but applications written in .NET 2.0 were right-on and never failed (the logic of .NET for our own <a href=\"http:\/\/neosmart.net\/EasyBCD\/\" rel=\"follow\">EasyBCD<\/a> was along the same lines). <\/li>\n<li><em>Backwards Compatibility<br \/>\n  <br \/><\/em>New technology is always streaming in, and sometimes you just can\u2019t teach an old dog new tricks \u2013 but with .NET you don\u2019t have to. WinFX \u2013 the bleeding edge display and backend code framework taken straight from Windows Vista will run on Vista, XP, 2k, all the way back to Windows 98. As you go down the chain, the complexity of getting that new technology going only grows, but you don\u2019t have to worry about it.<\/li>\n<\/ul>\n<p>But these arguments aren\u2019t new, far from it \u2013 these were used ever since the creation of the Virtual Machine, but something makes them stand out with Microsoft.\n<\/p>\n<p>What makes .NET Framework so different from the traditional Microsoft application development model is that they\u2019re not afraid to innovate. With Microsoft pushing <a href=\"http:\/\/www.eweek.com\/c\/a\/Mobile-and-Wireless\/HP-TouchPad-Needs-68-Weeks-for-Additional-Shipments-142584\/\" rel=\"follow\">dynamic language support<\/a>, it is obvious that they\u2019re willing to push .NET to the extreme, something that Sun Microsystems refused to do with Java and as such it quickly became an outdated bit of code, which just doesn\u2019t cut it for most.\n<\/p>\n<p>But support for dynamic languages doesn\u2019t make a platform perfect nor is it the ultimate symptom of innovation. What makes .NET work is the fact that it is directly integrated with the operating system, especially Windows. It means that you are running native applications straight from the official binaries with close to no middle-men along the way. But the next section deals with that more.\n<\/p>\n<p><!--nextpage--><\/p>\n<p><strong>.NET Performance \u2013 Steadily Climbing<\/strong>\n<\/p>\n<p>When Microsoft first released the .NET 1.0 Framework, it was Java with a different name, slightly better performance, and a variety of different syntaxes to go along with it. But all that is changed now. The initial release was closely followed by a 1.1 release (.NET 2003) that focused on code reliability and performance, with minor upgrades to the languages, and two years later with .NET 2.0 \u2013 the biggest upgrade since.\n<\/p>\n<p>Many people still believe the age-old myth about virtual machines running slower, but with .NET 2.0, it has certainly been debunked. .NET applications have integrated MSIL code optimizations and serious performance boosts via the underlying platform. While the overhead of running a virtual machine will never allow it to be as fast as 100% native code <em>with serious effort and focus on optimization<\/em>, it\u2019s nowhere near as slow as it\u2019s purported to be, and is <em>faster<\/em> than a standard un-optimized C++ application\u2026 But it\u2019s the memory that hurts.\n<\/p>\n<p>The entire .NET platform is <em>individually<\/em> loaded into the memory for every application you run, in its own private unshared memory space. But besides the overhead of the .NET Framework being pre-loaded into the memory space, .NET\u2019s automated garbage cleanup far surpasses Java\u2019s in terms of magnitude and \u201cintelligence\u201d and for larger applications can prove to be <em>more<\/em> efficient in terms of memory handling even with the overhead (stats to follow).\n<\/p>\n<p>But what matters most is that the people maintaining the engine are the same as those maintaining the operating system. That certainly is true for Microsoft, and quite a few members of the Mono project also develop *nix OS code \u2013 but for the open source platforms that isn\u2019t as essential since the code is there for the world to see. But for Windows, it makes a big difference. When Microsoft is the sole maintainer of the .NET platform and is dedicated to keeping it up to scratch, with the same code used in the native applications and the Windows OS itself, it can only mean better and more compatible performance for everyone.\n<\/p>\n<p><!--nextpage--><\/p>\n<p><strong>The Microsoft Side of Things<\/strong>\n<\/p>\n<p>Microsoft has treated the .NET Development process in a way that no one could have ever anticipated, and it seems to be treating them well in return. Besides breaking quite a few \u201cfamily traditions\u201d of the Microsoft Camp, .NET is a step in the right direction no matter what angle you look at it:\n<\/p>\n<ul>\n<li><em>No Backwards Compatibility \u2013 Not Really<br \/>\n  <br \/><\/em>Microsoft\u2019s insistence on backwards compatibility won it a host of developers and a big headache back in the 90s \u2013 but with .NET it\u2019s a whole \u2018nother story. .NET 2.0 isn\u2019t strictly compatible with .NET 1.0 or 1.1 applications \u2013 that is, Microsoft isn\u2019t worried about bringing older applications crashing. After all, since the .NET platform is a virtual machine of sorts, why bother?<\/p>\n<p>Instead of allowing .NET 1.x applications to \u201crun guaranteed\u201d on the .NET 2.0 platform Microsoft simply provided a way to run both simultaneously without a problem. You simply install both engines, and the application can pick and choose the combination that suits it best: keeping the headache and bloat factors down to a minimum but nevertheless ensuring that developers don\u2019t need to sit for hours figuring out just why their applications don\u2019t run on the new platform. You just don\u2019t need to anymore. <\/li>\n<li><em>Friendly Licenses \u2013 Really Friendly<\/em><br \/>\n  <br \/>Using the licensing system first used in\/by <a href=\"http:\/\/research.microsoft.com\/en-us\/default.aspx\" rel=\"follow\">Microsoft Research (TM)<\/a>, the .NET Framework comes under a very friendly license that lets you do almost anything. Know as \u201cShared Source,\u201d it\u2019s Microsoft\u2019s version of the BSD License: you don\u2019t own the engine, but you can do whatever you want with it\u2026 And pass the license along. Or <a href=\"http:\/\/ironpython.codeplex.com\/license\" rel=\"follow\">something like that<\/a>. <\/li>\n<li><em>It Exists for Itself<br \/>\n  <br \/><\/em>Microsoft does the research, codes the platform, and then gives you the tools to do what you need. Besides being free, it exists for itself. What that means is, Microsoft doesn\u2019t use .NET as a way to gain money (not directly at any rate), but rather urges and innovates in .NET just for .NET to gain market usage \u2013 since .NET is guaranteed to run flawlessly on Windows and the server-side implementations still need IIS, and the users just want a steady flow of innovation and improvement for a framework that just works, it\u2019s a win-win situation for everyone.<\/li>\n<\/ul>\n<p>But .NET isn\u2019t just different, it\u2019s also the same. Everyone has heard Bill Gates\u2019 version of \u201c<em>I have a dream:\u201d <\/em>Information at the Fingertips. That was Microsoft\u2019s goal ever since Windows 2.0, and although Vista <a href=\"https:\/\/neosmart.net\/blog\/winfs\/\" rel=\"follow\">failed to achieve that<\/a>, .NET still can. The .NET Framework is at heart a framework that gives the developers direct access to the very tools they need to make applications that do exactly what they want, without needing to mess with the other code too much.\n<\/p>\n<p><em>But if .NET is what Microsoft always wanted.. What happened to Longhorn?!<br \/>\n  <br \/><\/em>That\u2019s a good question that unfortunately doesn\u2019t have a good enough answer. In the original alpha builds, Windows Codename Longhorn was a pure .NET-driven operating system, complete from head to toe.\n<\/p>\n<p>We can only guess what happened and why Microsoft decided to leave .NET and write Vista\u2019s backend and 99.9% of the UI in unmanaged C++, but it\u2019s probably something along the lines of \u201ctoo much pinvoke.\u201d\n<\/p>\n<p>To put it simply, .NET 2.0 simply isn\u2019t ready for a project on the enormous scale: an operating system. It isn\u2019t flexible enough, but even more importantly: it isn\u2019t mature enough. It\u2019s stable, but it\u2019s missing too many functions that are required for an operating system to work the way it should. Too many low-level calls simply aren\u2019t there, and if you\u2019re going to use pinvoke 90% of the time, you might as well just fall back to C++.\n<\/p>\n<p>Although that doesn\u2019t satisfactorily put the question to rest, and Microsoft could have built the .NET Framework up around them as they went along, it doesn\u2019t really matter. Anyone using .NET will be writing applications to run <em>on top of<\/em> an operating system, not instead of one \u2014 and for that it\u2019s plenty good enough.\n<\/p>\n<p><!--nextpage--><\/p>\n<p><strong>The Inevitable Conclusion<\/strong>\n<\/p>\n<p>We started off by looking for just how far .NET can go, but we really don\u2019t have an answer. <a href=\"https:\/\/neosmart.net\/blog\/a-separate-net-30-and-what-it-means\/\" rel=\"follow\">The .NET 3.0 Framework<\/a> goes beyond just data handling and information management by adding the power of XAML and its wonderful display functions (straight from WinFX) to the existing \u201ctried and tested\u201d .NET 2.0 code-base, but it\u2019s by no means the end.\n<\/p>\n<p>As it is, Microsoft\u2019s award-winning platform has obviously <a href=\"http:\/\/www.eweek.com\/c\/a\/Mobile-and-Wireless\/HP-TouchPad-Needs-68-Weeks-for-Additional-Shipments-142584\/\" rel=\"follow\">overtaken the competition<\/a>, and has a winning horse on their hands. Surprising as it may be given their recent string of failures, Microsoft hasn\u2019t bungled up .NET, and if it continues on the same path, it may even become the the only platform of the future. After all, if BlackComb is .NET-powered, what more does one need?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>4 short years ago, Microsoft unveiled its new framework\/engine for programming and running applications in a virtual environment, and the world was stunned. Microsoft had introduced a run-time environment that was for the first time a true \u201cWrite once, run &hellip; <a href=\"https:\/\/neosmart.net\/blog\/is-net-taking-over-the-world\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[91,212,67,355],"class_list":["post-235","post","type-post","status-publish","format-standard","hentry","category-software","tag-net","tag-development","tag-java","tag-software-center"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p4xDa-3N","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/posts\/235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/comments?post=235"}],"version-history":[{"count":11,"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/posts\/235\/revisions"}],"predecessor-version":[{"id":2040,"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/posts\/235\/revisions\/2040"}],"wp:attachment":[{"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/media?parent=235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/categories?post=235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/neosmart.net\/blog\/wp-json\/wp\/v2\/tags?post=235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}