'Cosmo' — a C#-Based Operating System
Billly Gates writes "A new operating system called Cosmo has been developed, written entirely in C#. It shows the naysayers you can write a full OS kernel without C. So far, you need Visual Studio to compile and run it, as Mono is not supported. However, the source code can be compiled with the Express editions of Visual Studio. The project plans to add VB.NET support soon."
There haven't been any updates to the site in many months. Dead links left and right.
The project is called Cosmos.
What's the C# runtime written in?
What good is an open source OS if it requires me to purchase proprietary products to change or compile it? that's not freedom, that's just extension of Microsoft marketing campaign. And what about threat of Microsoft someday saying things built with their tools have Microsoft IP in them?
Requiring a Windows environment to compile a OS is like using dirty energy to produce clean energy.
.... if you ignore the inline assembler code.
Imagine if you could write an OS without C, why you might go so far as to write a machine that could run Lisp native.
> Cosmos includes a compiler (IL2CPU, which is part of Cosmos) that reads the input file (usually the shell) and Cosmos libraries and compiles the resulting IL to x86 code.
So it is not .NET/Visual Studio what you are using but a derivation of what .NET/Visual Studio produces.
> IL2CPU also supports certain extension methods which allow C# code to interact directly with the CPU, registers, and ports in the kernel.
So it is not C# what you are using, but another language which makes it basically C++ (the real one, not that C++.NET bullshit).
How is this news? Besides, http://www.gocosmos.org/Old/Screenshots/gfx/guess.JPG 404s and runs under IIS.
does it run Linux?
Ha ha ha. This is why I come back to Slashdot time and time again. Fresh, witty jokes of this caliber.
You could build a high-rise building out of sugar cubes if you tried hard enough, but why? Is there really a need for yet another OS, built on yet another language-to-save-the-world? What this tells me is that there was this person who had way too much time on their hands, and rather than do something really useful with this time they decided "hey, wouldn't it be crazy-cool to have an OS written entirely in C#?" and there was no significant-other around to slap them upside the head.
I don't really see the point in this - but that's irrelevant. The people developing this want to spend their time on the project, and that's all that matters. ... or so the discussion would go if the Cosmos creators hadn't built this on a Microsoft foundation. I expect a lot of comments will take a completely different viewpoint, given they'll see this as "tainted" by Microsoft. It'd be nice to be proven wrong, though.
Oh, and they chose the BSD license. That'll rile up some folks as well.
#DeleteChrome
#. It shows the naysayers you can write a full OS kernel without C
Congrats you showed the empty set something. Since nobody with the two brain cells required to know the word kernel would claim C is required for one.
Given we had then before C existed - GM-NAA I/O in 1954 would be the obvious "before C" one.
And we had non-C ones after C existed - LISP machines being the obvious example there.
It's only required because those developing Mono can't be arsed to make their implementation up-to-date.
This is the stupidest motive for writing an operating system I've ever heard of. What about VMS, written in FORTRAN? Or HP RTE-A, also written in FORTRAN?
Do you think the "classic" operating systems were written in a language that didn't even EXIST yet?
I do not fail; I succeed at finding out what does not work.
This article is a failure on so many levels. It's about a dead project that sounds pointless in the first place, and they didn't even get the name right in the headline or summary.
It's a trifecta of fail all at once.
There's no -1 for "I don't get it."
How about Singularity, Microsoft's own attempt to write an OS in an extended dialect of C#? Is this aiming at similar goals in any way?
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
Mono is not supported. Didn't you at least read the SUMMARY ?
Are you implying Windows is free now
Windows Home Premium (OEM version) is subsidized by trialware publishers, making it free as in beer to home users.
they will realize that C with some ASM produces the best performing, most efficient operating systems.
God forbid anyone just think it's neat for the sake of doing it. No, everyone has to go on an anti-Microsoft rant. Personally, I think it's kinda cool. I'd never use it for anything, but it's still cool that it was done. Instead of shitting on the developers just be happy they did something outside of the norm.
"Ubuntu" -- an African word, meaning "Slackware is too hard for me". - stolen from Dan C alt.os.linux.slackware
It's hard to tell what, if anything, this thing does. The "documentation" is a mostly empty wiki. There's a useless FAQ and a useless technical FAQ. Neither answers basic questions like "what does this run on" and "what is the API for programs which run on it". I can't even figure out whether it runs on a bare machine or on Windows or Linux or what. ("Your search for 'installation' has returned 0 results").
What this seems to be is some kind of scheme for running Microsoft .NET on a bare machine. Except that it doesn't, apparently, really boot on a bare machine; it's normally run as a Windows application under Visual Studio. I think.
good luck trying to write a memory manager in a manage language
-- I'll take C# for 800, Alex. ... Pino.
-- The keyword that enables pointer arithmetic.
-- What is unsafe?
-- Yes!
or a fs
As long as your code can read and write blocks on the device, a file system can be implemented in any language. Some operating systems allow file systems to run as user processes, and not just experimental microkernels either.
-- Linux for 400 please. ... Abi.
-- This electrical current limiter shares its name with a file system framework.
-- What is a fuse?
-- Yes, and you're on the board. Go again.
"oh but you can only use a subset of C# there" well, duh
A bootloader can only use a subset of C because it needs assembly language to get the x86 CPU out of backward-compatible "real mode".
s/can't be arsed/don't have the resources.
Given that Microsoft keeps adding stuff to C# and .NET, and that they aren't exactly contributing to Mono, it's not really surprising that things are the way they are. It may technically be better than Wine, especially if you explicitly target Mono, but that's essentially what we're dealing with here.
Don't thank God, thank a doctor!
If you have looked at Singularity the past, you are welcome to develop on Cosmos however you must be careful not to use your knowledge of Singularity. Unless you were involved deeply into Singularity code this will likely not be a problem. If you are concerned about this, choose purposefully to develop in a different area of functionality in Cosmos.
http://cosmos.codeplex.com/wikipage?title=FAQ
And no, that's not a joke.
On second thought, let's not go to Camelot. It is a silly place.
Linux is written mainly in C, but there's also inline assembly.
Don't thank God, thank a doctor!
Microsoft have the advantage that they know what's going to be in C# and .Net way before Mono and they can design their features based on what's easiest for them to implement on Windows starting from their .Net implementation, whereas Mono has to play catch-up...
This project would interest me (a little) if the assembly that the C# is compiled to were run on silicon that executed CIL as machine instructions. Even if the CIL implementation were microcode that invoked x86 instructions, or a Transmeta-type on the fly conversion to native instructions.
--
make install -not war
If you're going to replicate an existing project you're always going to be behind it, whether you follow an open or closed development model.
Now, Mono could (and does) add functionality MS doesn't offer, creating exactly the same situation in the opposite direction, assuming the Mono additions become desirable enough that MS would want to keep parity.
This is actually very insightful. First let me applaud this very important beginning step.
The goal is for the end-user to be able to port their apps and data to a new architecture. We have known that this is required for continuous IT operations over transformative tech innovations since at least the 1970s.
To achieve the end user must be able to cross-compile the OS, compiler and tools to the new target platform. And when the target is booted, the apps compiled and the data ported over, the end user must be in a position to do it again.
Anything less than this is a trap that relies on others to provide the ability to adapt to change of underlying hardware.
End users don't have to actually use this facility. But it must be present and proven to avoid the trap of dependence on the ability and benevolence of others.
Help stamp out iliturcy.
Any language that can read and write values in the HW - CPU, buses, chipset and RAM - can be used write an OS. Or any language that can do so after being compiled (which largely depends on the compiler).
But whether any old language is good for writing an OS is another story. If the language has few people with OS-caliber skills to read or write it, probably not. If the language is inflexible in its style, or low performance in its execution (eg. few result bits per op), probably not.
Java for example seems like a good OS language - especially for a distributed/virtual machine, as that's its native target HW - despite its abstraction away from bits and memory. Javascript does not, since it's not very expressive in manipulating bits, and its programming community relies on high level objects like the DOM and browser app for most techniques.
--
make install -not war
Ok, yes, there's the "because I can" motivation behind things like hanoimania, and if you don't think that's awesome, I don't know what you're doing on Slashdot.
But there is a more serious reason this would be useful, either in C# or .NET: A managed memory OS would likely be more secure and more stable than one written in, say, C. They're also playing up the idea of having it be entirely verified. It's also nice in that if apps are all bytecode, it should be transparently portable across hardware.
Such a beast would likely not be a replacement for current OSes for a long time, because of performance. I'd love to be proven wrong here. Still, even if it comes at a heavy performance penalty, I know there are a lot of places I would gladly take an 80% performance hit for better security and stability, especially on today's hardware. In fact, that's a reason to run web apps. At the very least, there are small apps like the ragemaker which are useful despite whatever imperceptible performance penalty there is, but which there is no way in hell I'm going to run outside of that sort of sandbox. And, similarly, there's no way in hell I could expect its author to release a Linux/ARM version, but if it runs in the browser, it runs on whatever platform/OS I want.
Don't thank God, thank a doctor!
no. why? what did it say?
rewriting history since 2109
dont try to inject logic here, this is slshdot, and nothing before yesterday existed (just ask the apple nuts)
Microsoft Research has been working on this for many years and has at least two such projects:
http://en.wikipedia.org/wiki/Singularity_(operating_system)
http://en.wikipedia.org/wiki/Midori_(operating_system)
The code is ahead-of-time compiled using the Bartok compiler:
http://en.wikipedia.org/wiki/Bartok_(compiler)
...who said you couldn't write an OS in C#, or that you couldn't write one without C? Obviously C wasn't used to build the OS that C was built on. And if that someone said they couldn't do it was their reason for doing it, quick, someone tell them that there isn't an OS written in COBOL and that they can't paint your house with a toothbrush. And no, if I say I think it's a waste of your time to paint a house with a toothbrush, it isn't because it's a Microsoft toothbrush or Microsoft paint or that you're painting a Microsoft house, it's because it's a frickin' toothbrush. By the way, I love how the FAQ link takes you to a page that tells you they moved the FAQ instead of just taking you there. It reminds me of all those links wannabe web designers did in the style If you'd like to read about Obvious Anchor Target click here.
Making the world a better place, one psychotic episode at a time.
That is one of the silliest statements I have seen lately. Of course you can write a kernel without C. You can write it in a lot of languages, the most obvious of which are assembly language or machine language. The latter is what C must eventually be translated into.
The issue may be what language is easier for the programmer to use, and which is more transportable from instruction set to instruction set.
There were a lot of kernels written long before anyone ever thought of C. Where has this person been?
*Visual Studio required
Looks like Visual Studio 6 might work in wine...
http://appdb.winehq.org/objectManager.php?sClass=application&iId=892
Why bother when you have C,C++,Shell, perl, python, ruby, lisp,scheme, OCaml, Haskell, hell even Java although to be honest about how the Java community is run, why bother with Java either?
Because Java gets you a huge supply of proven libraries without any native code. Because the tools for packaging, dependency management and building are better than anything else around. I hate writing Java, but having used it in a corporate setting I can see why its been so successful.
I am trolling
Sure, the project hasn't gone anywhere for a while, and C# isn't going to be most people's choice for systems programming without a whole lot of changes. But we need to face the fact that C is outdated.
A lot of the basic tradeoffs made in its design are based on assumptions that are no longer true. An example: C's need to have everything declared in the same functional unit before use and reliance on preprocessor #includes. In 1970, saving compiler effort and putting this burden on the programmer rather than having a more complex system for resolving symbols may have been an acceptable tradeoff; with modern machines it's ridiculous. Many other C design decisions have been shown to cause problems, confusions, and common security-problem-inducing bugs.
In the past 40 years, a lot of new ideas have emerged which make writing software simpler, faster, and better-organized; some ideas which make code safer or allow the compiler etc to do better optimization have emerged too. Parallelization/multithreading and concurrency have come to the forefront of programming problems, and languages can do better at taking it into account.
All this time, we've been writing almost all our most critical software with the same language K&R designed 40 years ago, or with something like C++ which inherits all its problems and none of its simplicity. Sure, people can point out a handful of examples of OSes built in other high-level programming languages back in the day before C had major uptake. But just about every machine out there today runs on a C-based stack.
The industry needs to find a new direction sometime; we can't procrastinate it forever. Very few people have made serious efforts to replace C at the OS level with something more modern. Even D, which is one of the very few newer languages which really try to be able to replace C, has no major OS effort. We really need to get OS developers and language&compiler designers on the same page, find a better standard for systems programming, and create a platform which isn't dependent on the C legacy. I, for one, am not about to laugh at any project which attempts to undertake this daunting task.
does it run Linux?
No. Perhaps partly by design, but mostly because the Cosmos project has been dead for a year or so, while Linux is apparently alive and well. The Cosmos site linked in TFS has lots of dead links (check the screenshots page) and empty forms (milestones page), with the last news posted in early August 2010. Where do the submitters dredge up corpses like Cosmos from anyway?
Those who can make you believe absurdities can make you commit atrocities. - Voltaire
So, first of all, a lot of the more enthusiastically open source types are much more likely to contribute to other projects which are less likely to be annihilated by patents, and whose direction isn't set by a proprietary competitor. After all, if people actually want to develop a cross-platform app, there are already plenty of ways to do so, and if they don't, Wine and Mono are more or less band-aids to the underlying problem.
It's also worth mentioning that while open source occasionally does produce something awesome out of whole cloth, the most significant open source projects today have corporate sponsorship of some sort. It's not that proprietary development is better, per se, but that funded development may have more and more active contributors than weekend warrior development.
From personal experience, here are the ways I've interacted with open source:
First, tons of little one-off hacks on my own that make me happy it was open, but that I'm unlikely to ever share with another living soul. For instance, before PCI Express, I had a card which was AGP 8x / AGP 3.0. The ATI drivers were detecting it as... less than that, but for whatever reason, running it in that slower mode didn't work at all. At the time, the kernel proper did not have AGP at all (this was pre-2.6). Fortunately, ATI had this open-source glue code, which included their AGP implementation. I cracked it open, commented out all the autodetection, and hardcoded AGP 3.0. It worked beautifully, but there's no way in hell I'm submitting that upstream, and I wouldn't know where to start in fixing it properly. (Well, I wouldn't have at the time -- I was 15 and in no way a C developer.)
Second, paid to work on open source projects as a consequence of actual work. I have a patch in Ruby on Rails which I wrote on-the-clock, and a fork of a Rails plugin. This actually works best when it's MIT-licensed -- I don't want to maintain Rails or even necessarily that plugin, when I can have someone else or an entire community do it for me, so there's an incentive to submit patches upstream. However, I'm not sharing my entire code-base under GPL or something.
I never was employed as a full-time open source developer, but there are people who do that. For example, I have to imagine Chromium is largely developed by Google employees, but it's still open-source, and it's worth it to open-source -- they get not just vulnerability reports, but actual patches, when they screw something up.
Don't thank God, thank a doctor!
What does C# provide that's compelling enough for open source people to disregard the source of the language and it's past rude and evil behavior?
If past rude and evil behavior of the corporation which spawned a language is a reason to avoid the language, WTF are you doing using C?
It's not speed since C covers that. It's not object oriented since C++/python/ruby cover those.
Well, not all at once, though. C++ has OO, but it's a pain to use. Ruby's OO is awesome, but the language is very slow compared to C++, or even to C#. So, it's a nice mix of non-painful OO and programming in general (with garbage collection, closures, etc) and decent performance.
It's also cross-platform in principle (if you stick to the subset that works in both Mono and .NET), and it runs in a multi-language VM which makes it easy to tie multiple languages together.
Java is really the only competitor there -- Parrot would in theory be better, but there aren't enough languages actively targeting it. And even in Java, I still have to choose. I remember writing a one-off program in JRuby (so it could use some Java libraries), and after several attempts to optimize it to where it would run in less than several days, I rewrote it wholesale in Java. It was more painful to write, but it ran in minutes instead of days. If C# is better to program in than Java, that's already a win for cases where I care about performance.
I mean, listen to yourself:
It's not regular expressions since it's hard to compete with Perl and nigh well impossible to beat Perl on this.
I'd argue Ruby does a decent job of ripping Perl off here, but regardless... Perl has regexes. It also has a really twisted OO system -- elegant in its own way, but I don't know why you'd choose that if you have alternatives. It has ugly syntax, even when you know what you're doing. Anti-patterns are the default -- like, say, ignoring errors unless you explicitly handle them.
The point is that C# is actually a decent language in a lot of these ways all at once. I don't know about you, but I use regexes, closures, objects, and complex enough data-structures that garbage collection would be nice -- so I use Ruby, but having that plus performance would also be nice.
Portability? Not going to beat Posix.
How about portability without distributing source? For that, you need something like LLVM, at least.
Don't get me wrong, I still use Ruby, Java, and C instead, and I've made a point of not learning C#. I've worked as a web developer, so I'm used to hopping between languages. But it would be nice to not have to do that.
Don't thank God, thank a doctor!
Because the tools for packaging, dependency management and building are better than anything else around.
Have to disagree here. To be fair, I haven't actually built Java packages myself, but trying to get a Java library installed (with all dependencies) is much more annoying than installing a Ruby gem.
Don't thank God, thank a doctor!
This was done in Java a long time ago. http://www.jnode.org/
--
Goldbox re imagined
http://goldchest.sourceforge.net/
If you're trying to install a java library system-wide you're doing it wrong; yes having each program package its dependencies is frustratingly wasteful, but it makes sure behaviour is consistent and reproducible.
I am trolling
But isn't the .net framework itself written in c or c++?
(The runtime not the libraries)
Your computer is that much more expensive than it would be if there were no such thing as Windows and only free OS's.
If there were only free operating systems, PCs would be less valuable to home users because the major movie distributors wouldn't be willing to license their movies for PC playback for fear of people using things like Xvfb to tee uncompressed frames into a transcoder. Case in point: Netflix isn't making a client for GNU/Linux, and its client for Android phones uses a whitelist of individual phone models. And when DVD was first being built back in the 1990s, I seem to remember a struggle between the PC makers and the movie studios as to whether or not to even allow DVD Video playback on computers.
Lol, this comment was in before any MS complaints, and it's at Score 5. Fanboys voting fanboys up?
Open or closed is irrelivant, paying developers to do work is what matters, especially when most people don't care about or are openly distrustful of the project.
This is a joke. I am joking. Joke joke joke.
Exactly. At least projects like Haiku are self-hosting.
There's another open source project similar to COSMOS called the Managed Operating System Alliance (MOSA). The MOSA project was formed to create an open source optimizing compiler and linker for the .NET (also written in C#) and provide a common framework for device drivers. The project is very active with almost daily commits and making tremendous progress. There has been some very early discussions in having COSMOS use the MOSA compiler.
You can get more information about it from our website and FAQs: http://www.mosa-project.org/projects/mosa/wiki/FAQ
Lisp machines showed a quarter century ago that you can have an OS from the iron and up (process management, memory management, graphics, disk drivers, ethernet, ...) in a managed, high level language.
The problem with this industry is its short memory.
If, say, civil engineering were like computing, the newbies would not know what the heck the Eiffel tower is, and marvel at someone's treehouse because it uses "space age" composites or titanium. :)
Say what you want about Microsoft (or Micro$oft, my bad). C# is a pretty nice language for anyone in the C/C++/Java world. By pretty nice I mean it's easily nicer than those other three. It's a shame .NET isn't more open.
It's been done in Modula 3 a long time ago, too (and the OS was called SPIN). Writing an OS without using C is nothing new.
Now there's two operating systems I'll never run.
People who:
1.) Dislike Windows
2.) Like Microsoft
Sorry, can't see this getting big...
But C# is still based on C. It's kinda like Microsoft saying "Oh, we got rid of DOS a long time ago". DOS (much like C) never really disappeared, the powers that be just got better at hiding it.
Too bad Visual Studio 6 was the last VS before .NET.
Man who leaps off cliff jumps to conclusion.
Until he explains why he made whitespace into a control character, I refuse to accept him as anythying remotely divine.
If past rude and evil behavior of the corporation which spawned a language is a reason to avoid the language, WTF are you doing using C?
I'd argue that the reason isn't that the language was created by a rude and evil corporation, but that it is controlled by a rude and evil corporation.
AT&T may have created C, but it didn't control it in any meaningful way. Yeah, the standard for years was "whatever the AT&T compiler will compile", but AT&T as a company didn't care about it. They weren't allowed to sell software because of the monopoly agreement they had with the government. By the time they were allowed to sell it, the cat was already out of the bag, and they focused their efforts on the whole SysV vs. BSD war.
Microsoft views .NET as a tool for lock-in. They intentionally sabotaged Java on Windows for years while they played catchup - hence why Java never really caught on as a language for full applications. Java's no better, really - Sun tried the same thing, more or less.
I'm not saying that you shouldn't use C# or Java or whatever - I don't really care. Just bear in mind these languages were not designed with the goal of creating programs - they were designed to control programmers.
Those who can't do, teach. Those who can't teach either, do tech support.
From their FAQ
Q: What works?
A: Console apps.
From their Technical FAQ
Q: How do I write to a file in COSMOS
A: You can't, yet.
Q: Can I use screen resolutions higher than 640x480?
A: Not yet, that would require individual device drivers writing.
Q: What doesn't work
A: Interfaces (In the programming sense and the graphical sense)
Foreach - Requires interfaces, so use for instead for now
I admire their attempt at doing something fresh, but how can you call this an OS when it can't write to files? And currently it only runs console mode apps. Sorry, but a 25 year old DOS box can do more than this.
Sun tried this with Java about a decade ago. The idea is still stupid.
I'm a good cook. I'm a fantastic eater. - Steven Brust
Why bother when you have C,C++,Shell, perl, python, ruby, lisp,scheme, OCaml, Haskell, hell even Java although to be honest about how the Java community is run, why bother with Java either?
None of those (excepting Java, which you also disdain) is especially good for writing the kind of internal custom apps that any company of any size has hundreds of.
Which, maybe isn't an area you care about, but in my market there's way more good pay / good benefits / good working conditions work of that kind out there than there are people to do it.
Anything I've written this year, I could write in C or C++, for example. It wouldn't have been as good as fast (which is important, because a day of paying me costs more than all the Microsoft licenses my work will use), but it could be done. Business tends to care about good and fast a lot more than open standards or the assorted advantages (and there are advantages, I don't deny that) of open source.
I think the accomplishment is somewhat negated by the fact that SIMPOS didn't run on a general purpose computer, but rather a system that was essentially a hardware-implemented Prolog interpreter.
Perl has regexes. It also has a really twisted OO system -- elegant in its own way, but I don't know why you'd choose that if you have alternatives. It has ugly syntax, even when you know what you're doing. Anti-patterns are the default -- like, say, ignoring errors unless you explicitly handle them.
This criticism that used to apply 15 years ago, but is not really relevant anymore. The Perl community has gone to great lengths to address these things.
For OO, nowadays there is Moose, which is an excellent and extremely capable OO framework for Perl. Please check it out if you like.
For the anti-patterns, please note that strict mode is now the default on Perl 5.14 and I cannot think of a modern library ignoring errors by default. The error ignoring behavior is there for a bunch of built-in stuff that needs to maintain compatibility with old code, but you can, and are encouraged to, include the autodie pragma to change even that behavior.
About the syntax, it's probably a matter of personal taste, so I can't say anything about that. But I believe that personal taste doesn't have to do with whether you know what you're doing or not.
Lastly, writing Perl doesn't mean that your code has to be ugly and error-prone. May I suggest Damian Conway's Perl Best Practices, which IMHO is an excellent book with recommended coding practices.
Hope this helps!...
How is this an operating system? You "run" it by hitting F5 INSIDE VISUAL STUDIO. The most basic thing an OS does is provide a bootloader. If you require a .NET runtime, which is a huge virtual machine, how are you writing an OS? A command shell is not an OS.
Maybe they go ahead and describe how they make a boot image later but I stopped at the "hit F5 in VISUAL STUDIO" part.
And another thing: Where in the article or in Visual Studio's system requirements does it say 64-bit Windows Vista/7 Home Premium is required, as opposed to 32-bit Windows XP?
If you have a 32-bit PC, which is likely unless your PC originally came with 4 GB of RAM or more, you have to buy a new PC anyway to run 64-bit Windows. If you have a laptop with Intel graphics or a netbook or nettop with an Atom CPU, you'll have to buy a new PC anyway to get the stronger CPU and video card needed to run certain categories of applications that tend to be exclusive to windows. If you bought a 64-bit PC, it probably came with a copy of Windows already installed; just boot to that partition.
Mono in the C# world is no different to OpenJDK or GCJ in the java world - they will always be second class citizens and as you put it have an uphill battle.
meant something more than chucking a bunch of boards into a case?
Why bother when you have C,C++,Shell, perl, python, ruby, lisp,scheme, OCaml, Haskell, hell even Java
Because C# is a different language to all of these, and has a different feature set from all of these, and therefore is at least for some applications better than all of these.
C: C# is object-oriented. This has been shown to be a serious advantage for most types of software development over traditional structured programming.
C++: C# is garbage-collected. This has been shown to reduce development time, complexity and number of defects in many cases over manual memory management.
Shell: C# is compiled to native code for execution, therefore is substantially higher performance.
perl, python, ruby: C# is a statically typed language, which has been shown to allow numerous programming errors to be caught at compile time rather than during testing, which is a clear win in many cases
lisp, scheme, OCaml, Haskell: C# is a procedural language, which most programmers are better able to identify with, so is more accessible to mid- and junior- level programmers, meaning you don't have to hire ace teams in order to work with it
Java: While Java is the most similar language to C# on this list, C# has numerous features that Java lacks, some of which are quite important to many programmers (closures, generics that actually work rather than just being a compile-time hack that introduce substantial limitations, anonymous functions, dynamic type inference to simplify variable definition, etc.)
The point is that a language isn't just one feature. It's a collection of features that place it in a multi-dimensional space occupied by all languages. And many problems are more easily solved in certain areas of that space than others, so the more languages you have at your disposition the better.
They intentionally sabotaged Java on Windows for years while they played catchup
I'd be interested in hearing more about this, if you have any info to hand. I know that they added Windows-specific classes into the java.* package hierarchy (which is why Sun sued them), but that was less sabotaging the language on Windows so much as trying to tie apps to Windows. (So sabotaging not Java, but the "run anywhere" goal.)
It's official. Most of you are morons.
Microsoft pulled this publicity stunt already with Singularity.
Guess where it went?
That's what I thought; moving on!
Cheers, DH.
Because the tools for packaging, dependency management and building are better than anything else around.
Have to disagree here. To be fair, I haven't actually built Java packages myself, but trying to get a Java library installed (with all dependencies) is much more annoying than installing a Ruby gem.
Apache Maven was built to solve this exact problem, and it does so extremely well... even if I do hate designing projects for it.
GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
I wish to subscribe to your newsletter, and all that.
Karma: Poor (Mostly affected by lame karma-joke sigs)
Mono in the C# world is no different to OpenJDK or GCJ in the java world - they will always be second class citizens and as you put it have an uphill battle.
OpenJDK is the base for the Oracle-branded Java JDK, not a second-class citizen like you imply. On the other hand, GCJ and Kaffe have an uphill battle.
GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
It's interesting to me, because I watched this meme develop on Slashdot. It started because Microsoft gave a demonstration of their new desktop, and mentioned that applications can be created with a combination of Javascript and HTML5.
.net, C++, or any other language. Some people in that thread, though, made the claim it was obvious that MS was dropping .net.
.net. By now, I'm sure that all the posters have been corrected, but they either refuse to accept correction, or they don't care that they're wrong. I suspect the latter. I think the posters are now deliberately trying to use Fear and Doubt, hoping to deter somebody from using .net.
Campaigning with FUD was wrong when Microsoft does it, and it's wrong when OSS advocates do it. Maybe I'm wrong, and the poster actually thinks that .net will be dropped; but I doubt it. He would had to be very deliberately ignorant.
The initial thread had many people wondering, "is Javascript and HTML5 the ONLY way to develop Apps?". This was quickly shot down. Reading the article, it was clear that this was purely an additional feature. Applications can continue to be written in
Since then, that claim pops up once or twice in any thread that mentions
More specifically, Microsoft can wait for any design decision that Mono does differently from them, work out the implications of that design decision; add something big, related to that design decision so that the design decision is committed then add something which is compatible with Microsoft's design decision but opposed to Mono's decision. The fact that Mono succeeds at all in copying much of .Net and in not ceasing to exist, even when it's parent company, Novell, is bought out is a real sigh of the strength of the open source methodology.
And the determinism of certain people paid by Microsoft to continue Microsoft's propaganda in the case of Mono and .NET. (Look at the investors in the company that is now supporting Mono and you'll see what I mean. There is very little in means of contribution to Mono outside of that company.)
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
They intentionally sabotaged Java on Windows for years while they played catchup
I'd be interested in hearing more about this, if you have any info to hand. I know that they added Windows-specific classes into the java.* package hierarchy (which is why Sun sued them), but that was less sabotaging the language on Windows so much as trying to tie apps to Windows. (So sabotaging not Java, but the "run anywhere" goal.)
Can't quote specifics, but go see the Sun v. Microsoft court documents. True, it was ultimately settled (so there's probably a lot of stuff hidden as a result), but there'll be a good kernel of information there to get you started.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
Until he explains why he made whitespace into a control character, I refuse to accept him as anything remotely divine.
The explanation is out there and it's pretty basic: whitespace is almost always used to indicate program structure anyway, so why have that and separate syntax? Why not have the visual cues we use to read program structure be the same ones used by the computer to interpret program structure?
(Of course, it does mean one can't write loops and such in a single line, even where it makes sense to do so. I don't think it's a perfect approach, but it does make a certain amount of sense.)
Bow-ties are cool.
Microsoft included a JRE with Windows (I don't remember what version) that was crippled and slow. This allowed Windows users to run Java applets (this was when applets were the main focus of Java), but they ran like crap.
The main point was to encourage developers to use ActiveX, which was IE-only. If they had just not included a JRE, then users would be prompted to install one, just like with Flash or any other plugin. By including a crippled version, users would think the problem was with the website.
Those who can't do, teach. Those who can't teach either, do tech support.
They intentionally sabotaged Java on Windows for years
I've got a news flash for you. Java on the Apple OS always sucked balls too.
SJW: Someone who has run out of real oppression, and has to fake it.
You could also build a house out of Popsicle sticks. But...WHY?
That question is fundamental to art in general. (More the general "WHY?" part - not specifically the popsicle stick thing - though it does come up from time to time.)
Despite all the lip-flapping, the real answer is often just "because I wanted to". And people may enjoy it just because "it's neat". It doesn't necessarily mean it's a practical thing, though sometimes it may be... And it depends on how you define practicality, too. (What's more practical than making something that earns you money?)
I'm not much of a .NET guy myself but I can see the appeal of taking that sort of system down to the core of the OS. From a practical standpoint, performance is bound to be a challenge - but having a lower barrier for people to be involved in development may mean the code gets more attention. And if performance optimization makes this kind of approach largely impractical at present, in the future this may not be the case - in fact, the ease of working with the code (esp. if C# can help with issues like thread synchronization) may be important as multiprocessing continues to become more important.
Bow-ties are cool.
It compiles into a bootable operating system. They're compiling C# to IDL and then IDL to native machine code. So, there you go.
Bow-ties are cool.
The point of using C was that you could easily embed assembly within it, it was reasonably elegant to program (I've seen 2 line 'hello world' programs written in C, and the equivalent in Java in as little as 30 lines.... and you Java kids who say "I can so do it in 2 lines... and then attempt to show me those two lines, I then try and run those two lines, and you mutter something about having to call in 30 lines of support libraries, and I have my point made)
There's a point people always seem to miss when using "Hello World" as an example of how elegant (or not) a language is:
Basically, it is this: Printing "Hello World" is not truly representative of the things people normally want to accomplish in a programming language.
At best, a "Hello World" example gives you the basic idea of how a language can be used to interact with the user: which is where those 30-line versions come from... The reason you've got 30 lines is probably because it's a GUI implementation of the example. Try something comparable in C and you'll probably get a comparably large source. Of course, there's usually some kind of utility function that'll let you do even a GUI version with less code - but that isn't the point. Again, under normal circumstances, throwing up a window showing a static message isn't something you'll want to do very often. Knowing how to create a window, set its title, and populate it with controls and respond to them, however - that can be the starting point to creating real programs.
When a "Hello World" example is more STDIO-oriented, it tends to be shorter and show you the basics of working in the language and using STDIO. It can be helpful for introducing the syntax, and any steps you have to go through to start writing a program.
But as an indicator of a programming language's "elegance"? It's ridiculous. A Haskell version of "Hello World" isn't going to teach you about pattern-matching arguments or list processing, let alone monads (though the Haskell version of "Hello World" will probably use a monad...) A Python version of "Hello World" probably isn't going to teach you about classes and objects, or the useful interactive features of the language, or the challenges posed by the level to which objects and their member values and functions may be redefined. A Perl "Hello World" won't even scratch the surface of its compact, sometimes arcane syntax - let alone convey how this "arcane" syntax can actually be useful.
You only get an idea of a language's "elegance" - and its potential in general - by working with it. And maybe not even then. :)
Bow-ties are cool.
At the time all this was going on, no one cared about MacOS. Apple's market share was in the toilet, and even their core users were switching to windows-based systems.
Sun focused Java development on Solaris and Windows, with some support for Linux (remember Blackdown?). They probably, like many of us, expected Apple to go the way of Commodore or Be. Add to that the fact that MacOS had a significantly different programming environment than Windows or Unix (no real preemptive multitasking, core libraries not based around C/C++, etc.) and you'd see why no one would want to put much effort into porting such a massive piece of software like Java.
Those who can't do, teach. Those who can't teach either, do tech support.
And here, again, Ruby wins. Bundler is a way to have gems installed system-wide, and managed/updated during development with dependency handling and everything else you'd expect of a good package manager, but precisely the correct version will be enabled in each app at runtime.
Essentially, it means that it's trivially easy to tell your app "Hey, go depend on (and download) the latest version of all libraries you're using." It just records those versions, all the way down, so that at deploy time, you can tell it "Install exactly what we had installed on my dev machine when all our tests passed."
The only configuration you as a developer need to set up is a tiny config file, written in Ruby -- check out the sample Gemfile on the Bundler homepage. Seriously, look at it -- tiny. I never want to go back to XML bloat again!
And rvm means I can trivially have a separate set of gems per Ruby version, which is where I actually do want duplication -- nokogiri will depend on and use very different things in MRI vs JRuby. Since rvm tends to install new Rubies by at least downloading if not compiling them from scratch, it will provide you with a Ruby that's more or less consistent across Unices, let alone distros.
All these things can be installed per-user, but they can also be installed to the entire system. So you get the best of both worlds -- reproducible behavior, but I can type 'bundle update' and roll all dependency versions forward, or add a line and type 'bundle install' to add a new library.
The downside to all of the above is that everything I just said is really about installing stuff on a Unix machine, likely a production server. For desktop apps, Java has a much more easily portable system, since you can't trust the user to have anything sane at the system level. (Of course, when users do, it'd be nice to have a Debian package or something.)
Don't thank God, thank a doctor!
Python is less obect-oriented and less featureful in general than Ruby, but executes faster. It is more fun to work with than Java, but slower. It doesn't change my point about having a language be as cool as Ruby, but as fast as Java -- python is neither, it's somewhere in between.
Don't thank God, thank a doctor!
I'm sure the C spec will eventually add some better parallelism.
You are right. C doesn't need to be replaced, just updated.
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=551&WT.mc_id=IT_NL_CPlusPlus_2011_8_30
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=552&WT.mc_id=IT_NL_CPlusPlus_2011_8_30
Really, if it's off C#, wouldn't it be possible to install DirectX? That's really the only reason I use Windows... though 7 has been a fantastic experience for numerous other reasons.
From the summary on their page it's quite apparent that they had to create special tools that gave C# direct access to pointers, CPU registers and even code written in straight assembly. All this business about "so there, a kernel CAN be written without C" is nothing more than flamebait; they've created a toolchain that allows them to break out of the pure managed environment and add low-level, C-like features to C#.
I'm going to the casino. Don't gamble.
That does help, but even if I grant everything you said, it implies that Perl is approaching Ruby in terms of features I care about, and performance is still going to be python or worse. So I think my point about why C# is interesting still stands.
A few more points that would likely still irritate me about perl:
But everything you've said will be helpful if I am forced into Perl again. It'd be nice for it to be a decent language, instead of "Well, it's an improvement on C."
Don't thank God, thank a doctor!
Just to be clear, I didn't say anything about C#. As a matter of fact, I agree that C# IS interesting in many pleasant ways.