Languags like Perl, Python, Ruby, and Java don't give naked access to pointers to memory... thus it is effectively impossible to get the kind of buffer overrun exploits that are so common in poorly written C programs.
http://www.google.com/search?q=%28ruby%7Cpython%7Cperl%29+%22buffer+overflow%22&btnG=Searchhttp://www.google.com/search?q=%28ruby%7Cpython%7Cperl%29+%22buffer+overflow%22&btnG=Search
Which localizes the problem to one codebase.
Still hard to say which case is worse. For example, lets imagine that someone has a 0-day Perl buffer overflow exploit. He can 'hack' nearly ALL programs that use the vulnerable language feature. And if he doesn't make the exploit public, not one's able to do anything about it. Meantime, a correctly written C program isn't vulnerable to these attacks, despite the language version.
from a hacker's point of view, the frequency of discovering buffer overflow exploits doesn't matter at all, if something could be vulnerable, it IS vulnerable and it can be used, and everything that a human makes, is vulnerable by its nature.
There is nothing wrong with the C language itself, it has all the constructs needed in most programs. There were some compromises made back when the ANSI standard was being set and the "standard library" was being defined that led to some pretty stupid decisions and implementations in the library that made it hard to not make mistakes or that automatically created some opportunities for exploitation. Those decisions were made by the commitee seeking compatibility and breaking the least amount of existing code, they weren't very security concious at that time.
Language selection is based on requirements or personal preference. I can almost write a C program faster than I can in Perl. That's because I know C a little better. My Perl programs tend to be a little C'ish and I will sometimes make some idomatic mistakes.
Java is a good tool but the programs tend to be slow for the same functionality in a compiled language like Perl or C.
The trouble I have with JVM, MFC, and the managed code libraries like the .NET framework is that you are dependent on a library you know almost nothing about, can't fix, can't maintain, can't snoop, and can't do without. You become a library junky. Dependent on a junky library. How many JVM versions are there? What did they fix and why? (See buffer overflows.) Sun has made JVM deployment mistakes all over the place and it's a PITA.A good programmer writes his own libraries or at least organizes his functions in such a way that he can re-use them to build better programs.
If you don't like malloc()/free() you can write your own. Good luck. Java takes that right away from you.They don't call it garbage collection for nothing. I remember coding in BASIC on the TRS-80 I in 1977 and watching my program stall suddenly while the BASIC interpreter collected garbage. We have not gone that far, really.
One things for sure, we need to build a team and start coding.
java programs suck and they're slow, so it's fair to say java sucks I guess, although maybe it's not necessarily java's fault.
lets code a kick ass tastyspleen cobol fianacial accounting program. with some leet text menus
000100 IDENTIFICATION DIVISION.000200 PROGRAM-ID. HELLOWORLD.000300000400*000500 ENVIRONMENT DIVISION.000600 CONFIGURATION SECTION.000700 SOURCE-COMPUTER. RM-COBOL.000800 OBJECT-COMPUTER. RM-COBOL.000900001000 DATA DIVISION.001100 FILE SECTION.001200100000 PROCEDURE DIVISION.100100100200 MAIN-LOGIC SECTION.100300 BEGIN.100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS.100500 DISPLAY "Hello world!" LINE 15 POSITION 10.100600 STOP RUN.100700 MAIN-LOGIC-EXIT.100800 EXIT.