Debugging Software using Virtual Networks
gunnk writes "In today's large intertwined networks it is awfully easy for a bug in one piece of software to have far-flung ramifications that may be horribly difficult to track down. For example, think about the chaos that could ensue if Cisco had a subtle routing bug in it's next generation of internet switches. Unfortunately, it is too expensive to build a test environment anywhere near the scale of the real environment, so the final "testing" occurs in the real world. A new idea has come along, however, that might just help: creating a virtual world in the real world network to test the software (with the added bonus of being able to step backwards through the process to analyze bugs). Sciencedaily is running an article on this method entitled "New Computer System Solves Problems by Tricking Computers"."
Gentlemen, the time has come for a serious discussion on whether or not to continue using C for serious programming projects. As I will explain, I feel that C needs to be retired, much the same way that Fortran, Cobol and Perl have been. Furthermore, allow me to be so bold as to suggest a superior replacement to this outdated language.
To give you a little background on this subject, I was recently asked to develop a client/server project on a Unix platform for a Fortune 500 company. While I've never coded in C before I have coded in VB for fifteen years, and in Java for over ten, I was stunned to see how poorly C fared compared to these two, more low-level languages.
C's biggest difficulty, as we all know, is the fact that it is by far one of the slowest languages in existance, especially when compared to more modern languages such as Java and C#. Although the reasons for this are varied, the main reasons seems to be the way C requires a programmer to laboriously work with chunks of memory.
Requiring a programmer to manipulate blocks of memory is a tedious way to program. This was satisfactory back in the early days of coding, but then again, so were punchcards. By using what are called "pointers" a C programmer is basically requiring the computer to do three sets of work rather than one. The first time requires the computer to duplicate whatever is stored in the memory space "pointed to" by the pointer. The second time requires it to perform the needed operation on this space. Finally the computer must delete the duplicate set and set the values of the original accordingly.
Clearly this is a horrendous use of resources and the chief reason why C is so slow. When one looks at a more modern (and a more serious) programming language like Java, C# or - even better - Visual Basic that lacks such archaic coding styles, one will also note a serious speed increase over C.
So what does this mean for the programming community? I think clearly that C needs to be abandonded. There are two candidates that would be a suitable replacement for it. Those are Java and C#.
Having programmed in both for many years, I believe that C# has the edge. Not only is it slightly faster than Java its also much easier to code in. I found C to be confusing, frightening and intimidating with its non-GUI-based coding style. Furthermore, I like to see the source code of the projects I work with. Java's source seems to be under the monopolistic thumb of Sun much the way that GCC is obscured from us by the marketing people at the FSF. Microsoft's "shared source" under which C# is released definately seems to be the most fair and reasonable of all the licenses in existance, with none of the harsh restrictions of the BSD license. It also lacks the GPLs requirement that anything coded with its tools becomes property of the FSF.
I hope to see a switch from C/C++ to C# very soon. I've already spoken with various luminaries in the C coding world and most are eager to begin to transition. Having just gotten off the phone with Mr. Alan Cox, I can say that he is quite thrilled with the speed increases that will occur when the Linux kernel is completely rewritten in C#. Richard Stallman plans to support this, and hopes that the great Swede himself, Linus Torvalds, won't object to renaming Linux to C#/Linux. Although not a C coder himself, I'm told that Slashdot's very own Admiral Taco will support this on his web site. Finally, Dennis Ritchie is excited about the switch!
Thank you for your time. Happy coding.
The internet is too much a brittle tree, instead of the mesh it was intended to be. If I have internet from two vendors, and you have internet from a different vendor, why shouldn't we be able run a wire, and add redundancy to the internet?
--Mike--
It's interesting that I see this article at the exact same time I'm actually testing some server software in three virtual Windows 2000 Advanced Server machines networked in a virtual network on my PC ... using VMWare. It allows me to test configurations and operations without actually using hardware and it's faster since I'm using backed-up VM's in case the software I'm testing destroys a VM (if it does, I toss the destroyed VM and unzip the original from a zip file in about 5 minutes). And, I can test virtually any combination of Intel-based OS's in my virtual network this way.
Anyway, back to work...
See http://www.isi.edu/nsnam/ns/ .
You are adding a new environment to a test environment. First of all, how tested is the virtual network virtual machine?
What's the odds of a bug occuring in the virtual network and not the real network?
What's the odds of a bug NOT occuring in the virtual network and in the real network?
There is no clear-cut way to be absolutely sure...
Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
In Linux environments, this is easy. Just use User Mode Linux