64-bit OS written entirely in assembly

posted May 27th 2011 11:22am by
filed under: software hacks

The folks at Return Infinity just released a new version of their BareMetal OS, a 64-bit operating system written entirely in assembly.

The goal of the BareMetal project, which includes a stripped-down bootloader and a cluster computing platform is to get away from the inefficient obfuscated machine code generated by higher level languages like C/C++ and Java. By writing the OS in assembly, runtime speeds are increased, and there’s very little overhead for when every clock cycle counts.

Return Infinity says the ideal application is for high performance and embedded computing. We can see why this would be great for really fast embedded computing – there are system calls for networking, sound, disk access, and everything else a project might need. There’s also ridiculously small system requirements – the entire OS is only 16384 bytes – lend itself to very small, very powerful computers.

With projects that are computationally intensive, we think this could be a great bridge between an insufficient AVR, PIC or Propeller and a full-blown linux distro. There’s just some questions about the implementation – we feel like we’ve just been given a tool we don’t even know when to use. Any hackaday readers have an idea on how to use an OS stripped down to the ‘bare metal?’ What, exactly, would need 64 bits, and what hardware would it run on?

Check out the Return Infinity team calculating prime numbers on their BareMetal Node OS after the jump.



105 Responses to 64-bit OS written entirely in assembly

  • sp00nix says:

    180 amps!!!! Im sure he meant watts :)

  • razor says:

    How about for Rainbow Table Generation, Key Hacking, RSA Hacking, SSL Hacking, Crypto functionality using algorithms that use 64-bit int’s at their core, like ThreeFish or SHA-384/512

  • Sstsalazar says:

    Now that is interesting, they developed something that is not only amazingo but a great learning tool

  • Colecoman1982 says:

    I can’t really speak from experience, but I do know that lots (if not most) of scientific computing requires 64-bit precision. I remember hearing that it was one of the early stumbling blocks for using GPUs in reseach calculations.

    If they could get one, or both, of the high-end video card makers on board to either make GPU drivers for BareMetalOS, or to provide the BareMetal guys with enough technical data to make their own, then this might allow for even more performance to be squeezed out of clusters built from x86 PCs with GPUs installed on them. Also, this might allow for faster clusters designed for solving problems that aren’t well suited for being run on vector processors like GPUs.

  • Doc says:

    I suppose this makes sense to me for embedded system applications that require a fair bit of high-precision math – I’m thinking video processing. So maybe useful for a rover or something.

    Still, I’m a bit confused as hardware’s fairly cheap. I guess if I were building something to leave the planet, I’d be interested in this kind of thing.

  • haybales says:

    If only consumer OS’s were programmed from the ground up like this…

  • Corwin says:

    I’ve been thinking about tackling a BitCoin miner on this platform. Without the overhead might be able to get some decent performance. Although GPU mining would likely still out pace it by a good amount.

  • Burzmali says:

    Keep in mind that the moment you cut straight to assembly, you make yourself platform dependent. Different processor? You could very well have to recode half your project.

  • Stan says:

    Perhaps it could be used as an RTOS for applications that require such a system like avionics and flight controls.

  • Verimius says:

    Reminds me of what was said about the first laser invented in 1960: “A solution looking for a problem.”

  • razor says:

    Someone mentioned to me when I mentioned this article to him: data processing for genomics and bio-modeling, you could use this doing base mathematical number crunching and 3D modelling as headless boxes that feeds the data back to a central server or machine that the scientist/physicist/astronomer/lab tech could actually interact with. They’ve made virtual universes for testing dark matter theory in server farms of 2000+ boxes running probably SUN Solaris or something for over a month to run one simulation of gravity models.

  • Deg says:

    >>Any hackaday readers have an idea on how to use an OS stripped down to the ‘bare metal?

    This is why people take Computer Engineering :P

    I do wonder what computer advantages you gain versus a cluster of linux boxes; couldn’t you feasibly write code as a kernel module to gain a comparable hardware interface? (Not a CEng!)

  • h4xorX says:

    So much could be done with this system! System could be used for robotics applications where high bandwidth data streams are in demand, i.e. robotic vision and ai, precise servo movement calculations, UAV auto-navigation and video streaming to operator. 64 bits of precision may also be used to reduce computational time and achieve higher accuracy in Finite Element Analysis/Modeling for Mechanical/Electrical/Physics simulations!

    Customize rendering algorithms – assemble multiple BareMetalOS Boxes for better graphics rendering, like real-time ray tracing! (Maybe just a dream)

    I haven’t looked at the specs in detail, but if BareMetalOS gives you hardware level control, why not experiment with linking multiple motherboards together over SATA? You can achieve higher bandwidth communications than with networking (4Gbps vs 10/100/1000 Base T) schemes and avoid network traffic. Massively Parallel Processing to the extreme – and is available to the public! Yeehaw people!

  • MrX says:

    There is also MenuetOS which even has a GUI:
    http://www.menuetos.net/

    and comes in 32 and 64 bit flavors

  • synergy says:

    in the video, why does he want to “1″ (the number) to primes, as far is I know 1 is NOT a prime?

  • IceBrain says:

    I don’t get people here. Overhead? What overhead? When have you seen the kernel actually take a reasonable amount of CPU time in any modern (say, +1GHz) CPU?

    This may be useful for embedded devices, but for a decent machine the overhead is negligible. Of course, most embedded CPUs aren’t 64-bit either, so this is kind of limited. Especially since they programmed against x86 and not ARM.

  • Solder_guy says:

    I wander if you can put this in a linksys WRT54G router?

  • Aaron says:

    haybales: …they’d cost $10,000 per license and see one update per decade if we were very lucky.

  • h4xorX says:

    @IceBrain
    The overhead due to an OS is essentially negligible for one computer, i.e. calls to the processor from background programs do not inhibit performance of your main application. Like watching a Youtube video and having a chat client up. However, if someone builds a computational cluster, overhead due to an OS scales with the number of nodes used. So, in the movie industry where 1,000′s of nodes are used to process/render scenes where it may take hours to compute a frame, take that almost negligible OS overhead multiply it by 1,000 nodes and observe more inefficient computational time that may translate to lost money.

    In addition, a high performance compute application typically requires a central location to store finished data, in which case hard drives at each node are a non-essential to the application. They are then a waste of space and since they require power to idle they waste money. Again, multiply the power used by each hard drive at each node by the number of nodes and here is wasted electricity that converts to wasted dollars.

  • Anne Nonymous says:

    What we need for comparison, is an OS written in Java, running on a Java interpreter written in Java.

    If Java is half as fast [or faster] as people make it out to be, it would be the optimum solution.

  • Hanswurst says:

    This is useless except for fun.
    OS overhead is not a problem in HPC and noone has the time to write apps in assembler.

    Also not having a real scheduler means that you can not have more threads than cores, which is really useful to keep the cores busy while waiting for data.

  • Dave M says:

    All early operating systems were written in assembly language. IBM, CDC, DEC, CRAY, etc. Unix caught on because people realized that their software investments could outlive whatever proprietary CPU and operating system they were using.

    If you are going to do floating point calculations all day long you won’t be spending much time *in* the OS kernel. So kernel performance isn’t that big a deal. Think applications like inter-process communications, networking applications that saturate the box with packet arrivals and context switches, etc. But apparently it doesn’t actually have a working TCP/IP stack yet… Oops, the reference TCP/IP implementation is written in C.

  • xorpunk says:

    IceBrain most of them don’t know what PE and ELF are either..or how stacks machines work..do something productive..

    let me know when they does what a compiler or kernel does more efficiently..

  • Blue Footed Booby says:

    There are really good reasons modern operating systems aren’t written in assembly. If you don’t know what they are, you really shouldn’t be doing any assembly programming.

  • Erich says:

    I remember coding Conway’s life in turbo pascal for a 10MHz 286. I was getting one screen refresh every 30 seconds running under DOS.

    I redid it in assembler using the 80×25 character video RAM itself as the memory structure (array) for the program. I got 15 iterations per second, and then 45 per second when I ran it on a DX4-100.

    So, there you have it, everyone need look no further for the problem supposedly awaiting this solution….

    :-)

  • Munch says:

    @Blue Footed Booby — No, sorry, I utterly disagree. If you don’t know what those reasons are, then you *SHOULD* be doing more assembly. That’s the only way they’ll learn.

  • Munch says:

    (That being said, I love assembly language coding. It’s fun and challenging. And, with the right libraries, just as productive as C or other languages. But, if you have said libraries, you’re already basically coding in C or other said languages, but with a different syntax. So you might as well code in C or said languages to begin with, and skip the learning curve.)

  • am_i_evil says:

    @Anne Nonymous -

    “Java” is a thing which comes in many profiles and environment. You can not benchmark “it” any more than you can benchmark Windows or Linux while not specifying what hardware you are testing.

    Java does not provide OS level services either. It’s an abstraction layer which depends on them.

    There is a Linux BIOS project which basically produces a less bare-metal, yet still stripped down OS service.

  • Decius says:

    I know this is a 64bit written OS, but if I had the ‘know how’ I’d easily run this on the PSP with it’s 333MHz CPU and 64MB of Ram which should be plenty in running a small a distribution.

    Sadly, the only project that Linux has seen on the PSP is the poorly done uClinux port which doesn’t really utilize anything :/

    *wishes I was smarter*

  • digitlworld says:

    I just want a consumer-level bare-metal hypervisor so I can stop VMing in a slower host OS.

  • fdawg4l says:

    @haybales – You’d see a lot more bugs. When was the last time you saw a compiler bug cause an application to crash? Or even a kernel to Oops?

    Also, debugging assembly (machine code) isn’t the same as running your friendly debugger on a corefile. I dont know what tools they provide, but the reason for higher level languages is to make this bug-find-and-fix problem a little easier to live with.

  • z says:

    I fail to see any value in writing an embedded OS in assembly for x86. This is like buying a Bugatti Veyron for your grocery trips.

  • Mark says:

    They promote it for HPC usage? What the HPC area doesn’t need is yet another platform that will be unmaintained in 20 years time. There is a reason why the HPC world have OpenMP and MPI. HPC programs tend to live forever if they are doing something useful.

  • Benny says:

    The guy just stumbled upon a bug in wolfram alpha. 1 is not a prime number =)

  • Zmaster says:

    I agree with IceBrain, despite the fact that actually any OS contains pieces of assembly, this is just pointless for computation because the overhead is minimal.

  • xrazorwirex says:

    Someone needs to figure out how to use this to generate bitcoins.

  • Ugly American says:

    Classic assembly OSs like MULTICS and the Burroughs MCP (of TRON fame) had huge advantages in that they were written on CPUs designed with multitasking, multiple users and networking in mind.

    What people need to realize is that decades ago a MULTICS machines could be physically taken apart while users were logged in, moved part by part to another location and reassembled – all without the users knowing.

    The popular modern systems are driven by economic utility to the sellers (proprietary lock in) not technical merit or good engineering principles.

  • Vince says:

    @IceBrain: There is tonnes of overhead in modern O/S Even with a really optimized O/S in modern terms you are using a few hundred MB of memory for holding the O/S and all the data associated. Then there are the tens of thousands of clock cycles being used to monitor user input, sensors, memory management, hard drive activity. When you strip all of that out you have the ability to perform more calculations per second, thus making it better for numeric calculations. The only reason you don’t notice the overhead is because as CPU power increases the necessary clock cycles are a smaller percentage of the whole.

    I think this would be a great application for cluster calculations, like rainbow tables or video processing, but there needs to be a lot more development and interaction with the orchestrator, but very cool.

    And really, I think the true spirit of hacking is captured when someone does not ask “Why would you want to do that” and instead “Why wouldn’t I want to do that”.

  • supershwa says:

    A 16k OS? Sweet! Should turn some heads in the field!

  • MrX says:

    @American I totally agree. Most of this situation was caused by the abusive Microsoft monopoly. IMHO, Microsoft did more damage to the technological evolution than good.

  • mstone says:

    The value of simple assembly code is inversely proportional to the length of your CPU pipeline. The longer your pipeline, the more it hurts to handle branches the ‘simple’ way.

    Say you have a piece of code that checks a bit and executes routine A on a 1, routine B on a 0, then returns and does some other math with the results. Following that path directly is fine if the CPU completely executes one instruction before starting the next, but practically no CPU does that any more.. they break the execution process into stages, and execute them in parallel.

    The classic RISC pipeline is 5 stages long: fetch the next instruction, decode it, execute it, do memory I/O, then do register I/O. If we have to wait for the conditional to decide what the next instruction will be, it means there will be at least four empty slots in the pipeline. The first instruction of routine A or B won’t happen until at least 4 clock cycles after the conditional.

    Microcontrollers like the AVR and PIC have short pipelines — only 2 stages — so that doesn’t hurt too much.

    The IA-64 architecture, OTOH, has a 10-stage pipeline. It also has 30 execution units divided into 11 different groups, and its fetch mechanism can feed 2 instructions into the pipeline per cycle. The challenge is to keep them all working efficiently at once.

    For that architecture, it would be more efficient to load both routine A *and* routine B into the pipeline before the conditional even finishes executing. That way, at least the one you need will be ready to go by the time you decide which branch to take. The CPU will just drop the branch that wasn’t chosen, but that doesn’t cost any more than letting those units sit idle while you waited for the conditional. It would also be more efficient to pipeline any code that follows the call to A/B that can be executed independently of A/B, or which can treat the result of A/B as a value in register R.

    Point is, compilers don’t produce convoluted assembly code because the back-end programmers were dumb, and ‘simple’ isn’t necessarily a virtue when you have multiple paths of parallel execution.

  • I remember hearing that it was one of the early stumbling blocks for using GPUs in reseach calculations.

  • zdavkeos says:

    Just thought i’d mention that you can write your applications in c/c++, you are not limited to assembly. Just because the os and libs are written in assembly doesn’t mean that you are limited to assembly.

    I have it fired up in qemu, and it is a pretty fun toy.

  • Okay, let’s think about it. You can use this incredibly small, fast OS to create whatever you want, because you could write a C compiler very easily. If you can’t, then you are not in a position to really see the advantages first-hand. And, C is portable and this implementation would be absolutely phenomenal for writing AI algorithms, code crackers, emulators, etc. I would love to have a plain vanilla OS for the best multi-core processor that supported little more than DOS and C. The things you could do with it!

  • MattE says:

    First up, this project is brilliant (I like it), but the comments here have been really out-there. Writing a whole OS in assembler is fun and a useful thing to do as a learning tool, but for people arguing “oh but it’s faster!” for production use: I remain unconvinced that any speed advantages aren’t far outweighed by problems; portability (see next point), maintainability, etc.

    The people wanting to run this on their PSP/ARM board/Car ECU are both hitting the nail on the head — good luck, x86-only and realistically cannot be ported without a total rewrite — and sh1t out of luck.

    The people arguing that old mainframes had OSes written in assembler are ignoring the reasons: saving every byte was crucial when you had 2MB of memory and it cost you $2M, and old compilers were awful.

    Anyone wetting themselves about the newfound possibilities of your x86 machine running this — ZOMG I can calculate X now, I couldn’t before! — probably doesn’t realise how little overhead running, say, Linux has. You will not suddenly get a 50% performance boost by not running an OS written in C. You will not suddenly get “more precise calculations”; you’ll find your FP is exactly as accurate as it used to be and if you find you now can do 64bit integer stuff on your x86-64, you were running the wrong 32bit-only kernel before.

    Yes, GCC et al aren’t perfect. If you’re really concerned about your algorithm’s speed, write the core algo (and no more, go read Knuth) in assembler in userland AND hack on GCC to improve it. This is not the same as writing your OS in assembler. If your OS and compiler really do add lots of overhead, *fix them*, as they shouldn’t.

    HPC is more than just performance; OSes like Linux have necessary things like clustered filesystems, varied I/O (anyone want to write a FC/Infiniband driver for this asm OS?), and god forbid, compilers. Even FORTRAN. ;-)

    Rant almost over: Some of the memory footprint comments are both exaggerated and not as much of an issue as you make out. I don’t see HPC vendors desperate to reduce their kernel footprint from a few tens (yes) of MB to a few tens of KB. There are comments about your OS wasting cycles on managing devices, etc. Are you suggesting your OS polls all of your devices just for fun? If your OS is spending cycles managing your disc controller it is because, and only because, there is something disc-related that needs to be done! Whether your OS is baremetal or not, your data isn’t going to come off disc without you asking for it. The percentage of time “wasted” by this code being written in C is tiny, and the percentage of time your processor spends doing this is tiny, resulting in tiny^2 time wastage having a C driver doing this. I would much prefer my SATA driver/precious filesystem runs 0.1% slower if it’s less buggy!

    Wait, not quite over: In many HPC scenarios your application code (be it hand-written assembler, C or FORTRAN, depending on how much of a pervert you are) is running on your CPUs 100% of the time; your I/O will often be separated on different nodes to the computational nodes. Before someone complains about a 100Hz tick interrupt reducing the number of L33t Algorithm Cycles available to play WoW via a neural net, on many systems you may experience NO IRQs unless you want them. (E.g. IRIX has a “switch scheduling tick off” syscall ;-) ) Tickless kernels, huge pages, pinned CPUs, your working set fully RAM-resident; at this point your OS may as well be written in BASIC because it’s having to actually do anything while your application runs :P :) Plus, you won’t have to spend thousands of personyears writing drivers for all the hardware you need to use.

  • Jonam says:

    Then there’s Kolibiri OS, a Russian developed system that’s been around for years and written entirely in assembly too:

    http://kolibrios.org/

  • M4CGYV3R says:

    @mstone: It’s easy to handle race conditions like that with clever programming. Without having seen the code for this, I think that is likely one of the things they handled in this OS. It’s a pretty basic consideration in programming for a thread-capable architecture.

  • Irish says:

    I’ll bet SETI could think of a few thousand signals to crunch with this.

  • TheInternet says:

    Cool project, good learning experience, and somewhat useful.

    The problem is who is going to write applications for this, assembler has one hell of a learning curve and most modern programs are written in C/C++.

    If they want this thing to be used much, they need to port glibc or newlib to it. I would replace several virtual machines with it if they did. (I am only assuming they haven’t at this point.)

    I tried writing my own OS, and it’s a lot of fun and I imagine they do it more for fun than they do for some made up overhead and computational power reasons.

    For embedded though this is useless. 64bit x86 processors?! Embedded in what? A space shuttle?

  • FedeOrtiz says:

    Great Project!! As many have said before it’s fantastic for learning purposes but may very well never find a real industry use.

    Either way, just great that someone took the time end effort to program, document and SHARE IT!!

    So thank you guys at Return Infinity! ;)

  • cdjstyle says:

    hackaday wrote:
    “Any hackaday readers have an idea on how to use an OS stripped down to the ‘bare metal?’”

    @hackaday:
    you basically answered your own question in the sentence “By writing the OS in assembly, runtime speeds are increased, and there’s very little overhead for when every clock cycle counts.” Any time getting the most out of a piece of hardware is necessary, assembly seems to be the language of choice.

    For example, most home video games that came out in the 16-bit era or earlier were written in assembly. There are some pretty impressive games for Genesis and SNES that squeezed every bit of processing power out of the hardware because they were written in Assembly.

    Even some software for modern OSes were written in assembly. Remember bleem!, the PS1 emulator? Almost entirely written in assembly. Not perfect, but impressive for the time it was released. It ran on a variety of computers, even those not top-of-the-line (as long as it had a 3D-capable video card).

  • hammy says:

    I’ve been doing my first ever uC course where we are being forced into learning assembly to proram Motorola 64CH11′s… using a bootable Win98 dos USB drive, writing all the code in EDIT, running all the compiling in AS11 and simulating it all in Sim68 ;_;

    It’s like a time machine to 1989 and I want to kill myself

  • pankromatic says:

    If nothing else, this shows the code bloat that results from high level languages.

  • anti-fanboi says:

    LOLz!
    Given that we’re talking about competent coders and not pure CS/MBA types:
    ASM execution is ALWAYS faster than C/C++/Java/BASIC etc.
    I wonder how anyone can deride something they cannot actually do themselves. For example the reason you are a good $lang coder is that you can actually “think” in $lang. “Good” code has a poetic nature to it, really good code actually reads like poetry and requires virtually no comments in the same way poetry requires no footnotes. To appreciate poetry you must first understand inherently the subtleties and nuances of the language, be it a computer or spoken language. If you can’t even think in assembler then do us all a favour and don’t pretend to know. Yeah I know, most people think ASM is quite analogous to Klingon… BiHnuchs :)

    The root cause of the problem in my opinion is the inherent lack of will to learn and understand.

    The “cpu cycles are cheaper than coder salaries” meme has the same motivation as the “make the customer be the beta tester” meme. MBA style “profit trumps principles” greed. Yeah I know Microsoft made both these memes mainstream CS but they didn’t necessarily invent them.

  • cantido says:

    @hackday

    >the inefficient obfuscated machine code
    >generated by higher level languages like

    Do you have anything to back that statement up.. sure you don’t mean “generates code that is sometimes hard to understand because of all the various things the compiler is considering at compile time.. like pipelines, caches etc”.

    >Java.

    Do you have a snippet of Java generated asm. And I mean for the host machine not for the VM… A great deal of Java bytecode will never make it to native code..

    >>writing the OS in assembly, runtime speeds

    Until some tiny coding mistake/misunderstanding causes the pipeline to be evacuated…

    You see these sorts of statements all the time. I regularly see “I’m an 68000 expert!!” types moaning about the code GCC generates.. yet they don’t seem to have the balls to bring it up on the GCC lists.. I wonder why that is?

    @anti-fanboi

    >>ASM execution is ALWAYS faster than

    If the code you are writing is very small and simple or specific.. maybe. Maybe if your processor is a z80.

    >>Java

    Java has a JIT compiler.. for larger projects you will see the code Java is generate get faster and faster as it compiles common code paths down to native code and removes unused code out of the way. Can you do that in assembly without writing your own virtual machine?

    >>“Good” code has a poetic nature to it,

    You’re a Ruby dev aren’t you?

    >>really good code actually reads like poetry

    Oh dear.

    >>requires virtually no comments

    I never want to have to work on any code you have written.

    >>If you can’t even think in assembler

    Which assembly (I think you’ll find an assembler is actually the program that turns assembly into opcodes..) are you talking about? You seem to be making the point that people that don’t understand assembly aren’t good programmers.. but fail to mention what you are actually talking about. Almost anyone could generate nice assembly code for the z80 or something else of that level complexity.. but I think people that can generate efficient code for modern processors are few and far between and those people should be working on compilers.

    >don’t pretend to know.

    Is that not what you are doing right now?
    /me is confused.

    >The “cpu cycles are cheaper than coder salaries”

    Its about using the right tool for the job.. sometimes that is asm, most of the time it isn’t. Don’t try to make out it’s some “real coder” vs THE MAN! issue. If your boss/client asks you for an online shop you would be a retard to write it in assembly even if you could. You would also be a retard if you wrote a video encoder in PHP (unless it was for fun).

  • MrFluffy says:

    Once upon a time I used to write games software in pure 68000 on the amiga. One of the first things we did was capture the vertical blanking interrupt and disable all the basic o/s stuff and take over the entire machine and manipulate bits directly in the hardware chipsets. I’d have written completely non relocatable code if the damn o/s loaders had have kept getting in the way with all their c coded mess.

    Back then you could spot the tight assembler code decompiling someone elses work (its how we learned new tricks!), and the spaghetti code generated by someone coding in C and compiling it after (all the hardware libraries, blech), and we managed to extract some amazing performances out of the machine from hand coding things. It was coding ART, days pouring over instruction set manuals trying to work out how to save a few cycles here and there in loops which ran hundreds of times per refresh.

    I can totally see the attraction of bare metal hardware, and the whole reason I gave up low level programming was the mess of the x86 world more or less forcing c usage due to the need to cover a myriad of hardware setups.

    This, lovely, bare metal, always the same, you could make it sing. I’d love to have a cluster of them for heavy lifting and cut bespoke code for it. Trouble is, moores law would make it out of date in a few years :(

    All power to the peeps doing it!

  • polossatik says:

    @cantido: thankx for bringing a reasonable voice in this silly thread

  • anti-fanboi says:

    @cantido

    Ruby (or Java for that matter)? Oh boy…. Ruby typifies the “pure CS” I was comparing to MBAs, to me this illustrates how far you’ve missed the point I’m making. I accept I may not have made my point as well as I could have, sorry for that.

    As far as maintaining my code: I doubt you will ever get the opportunity, but if you do you can eat your hat then ;)

    Assembly/assembler… they have been used interchangeably to refer to the language for ages – perhaps longer than you’ve been alive, the point still remains. If you can’t think in a language then you don’t “know” it and if you don’t know it then how do you know it’s the wrong tool for the job?

    If you’ve never seen the poetry in any language or think that concept is a little esoteric that’s your loss ;)

    I can see why one might dread Assembler but I laugh at those who are hysterically scared of it :)

    Peace, Love and mungbeans!

  • pingumacpenguin says:

    Vi or Emacs ;¬)

  • Mark says:

    I can see that anti-fanboi doesn’t get paid to develop applications. Unless you managed to fool the management that your company’s business systems must be coded in processor specific assembly. Then I can see that you secured a comfortable future since you are the only one that truly understands the whole system.

    I’ve seen such systems and they may work but not much more. The guys that made it in the first place are long gone and don’t remember anything anyway. When old hardware starts to die out there is suddenly a problem to get the applications to run again. In these cases it’s always faster to start from scratch in a higher level language with a sane software architecture.

  • cantido says:

    >>Assembly/assembler…

    Have they? I have always known an assembler to be something thing turns assembly into executable code. I’m going to call source files editors from now on.

    >>If you can’t think in a language
    >> .. wrong tool for the job?

    Most of the popular high level languages are very similar and you should be able to pick them up if you have experience in another. Over time you also learn the “tricks of the trade” that will make you better in that language (if the compiler is clever the output shouldn’t differ greatly). There is no need to be over romantic about it. A lot of the time the language doesn’t matter anyhow, its all about the frameworks you have and the libraries available.
    The same is actually true of “assembler”.. if you do some asm in DOS using the services provided by int 21h it can seem like x86 assembly is amazingly easy and your code is magically compact.. in reality controlling everything in assembly by yourself is actually not that much fun and the resulting code can be nasty when you need to do workarounds. This is exactly the point of high level languages and OS services.. to handle crap that is non-trivial, messy and not commonly understood. Kernels like Windows and Linux and their c libraries contain tons of hand crafted asm code by people that “know what they are doing”.. like finely tuned memcpy implementations. Why reinvent the wheel we someone else has done it already, tested it, benchmarked it etc?
    If we go a level higher with Java.. most of the stuff your code will be doing is calling into Java’s standard library. Which does contain hand crafted asm where it is needed and when your code is doing something that can be turned into an efficient piece of native code the JIT will do that.. it will even create different versions tuned to the current situation.

    In summary “use the right tool for the job”.

    >>If you’ve never seen the poetry in any language

    I have seen good code, and I have seen clever solutions to problems. Most of the time clever solutions are commented to show why they are A: clever and B: work. Not commenting stuff is just stupid.

    >dread Assembler

    What “Assembler” are you talking about here? One machine can be very different to another.. hell there are even different assembly syntaxes for the same archs. Lots of people hate x86, 8051 etc asm but love z80 or m68k. Lots of ARM cores have some degree of hardware support for executing Java bytecode…. assembler isn’t a language like C. It’s describes a family of “languages” that are human readable representations of the machine’s programming model.

    Understanding some basic CS concepts – Good
    Understanding the machine you’re using – Good
    If you’re doing something on the metal.. like a bare mental MCU project; Understand enough of the machine to do stuff that isn’t always possible in C etc.. like interrupt setup – Good
    Hand tuning code paths after profiling – Good
    Doing crazy bit banging shit in what ever asm your machine uses for fun or demo coding – Good

    Trying to make out GCC, Java etc are “slower” than “assembler” without benchmarks, real world scenarios, the balls to back it up – Bad
    Using “assembler” out of some eliteness romantic “my code is art” bullshit – Bad
    Blaming “MBAs” for the fact that you would need to be batshit insane in 2011 to write even tiny embedded applications purely in “assembler” – Bad
    Blaming “MBAs” for your code being a messy pile of uncommented poetic crap — Bad

  • lexi says:

    This whole thing sounds like a big waste of time if you ask me.

  • Truth says:

    WARNING – the below numbers are just random.
    Lets say that an traditional OS has 99% of it’s resources available for crunching and that BareMetal OS allows 99.99% for crunching.

    Typical machine 2GB RAM; 2GHz CPU

    99% is 20MB of RAM and 20MHz of CPU cycles.
    99.99% is 200KB of RAM and 200KHz of CPU cycles.

    In a traditional 1000 node cluster this is 10 machines used for the OS overhead, so 990 machines for crunching. With BareMetal OS it would be 0.1 machines lost due to OS overhead.

    Advantages
    ———-
    Traditional OS would give you more flexibility, better hardware fault monitoring, better device drivers for multiple hardware configurations. Support for distributed network file systems.

    BareMetal OS if implemented correctly could squeeze every last drop of performance from the CPU and RAM.

    Disadvantages
    ————-
    Traditional gives a small wasted resource overhead.

    BareMetal OS no has current support for partial hardware failure notification, network DFS nor GPU acceleration.

    It is not an ideal OS for a large scale HPC installation. I personally think that it is brilliant, just not for HPC.

  • anti-fanboi says:

    Hey cantido, mate, your hair is on fire! I don’t have an extinguisher on me but I can sort something out if you’d like ;)

    Do a quick search on Amazon for “assembler” and let me know what you find.

    /dig Well what do you know, despite your innuendo and hysteria I was right…. Don’t worry it happens all the time ;) And that self-righteous indignation you’re felling right now – it’s free… you’re welcome :D

    I’m NOT saying Assembler is the right tool for EVERY job, please read what I said. I agree in general with your argument about the right tool for the job, but if you don’t know assembler and you’re making an OS (or an embedded device) you’d best leave the design decisions to those who are not afraid of the assembler boogie man ;)

    “like a bare mental MCU project” see you do have some idea of poetry :D

    Just because you don’t get my point doesn’t make it bullshit. Isn’t that bigotry or is it ignorance, I forget – English isn’t one of my best languages, it’s too “loosely typed” – I think you guys call it. I prefer C.

    /dig Actually, if I said you’re starting to sound like a Ruby dev, would you get what I mean ;)

    If I substituted “elegance” for “poetry” would it help? It’s not exactly what I mean but it’s better than your assumptions.

    /dig You referred to GCC as a language just to be ironic right? :D

    @Mark….. Um…er…. would it help if I typed slowly? We’re talking about writing an OS in assembler not business apps or online shops. And what I do for a living is irrelevant to my point, right?

    I’ve worked on such messes too. Let me assure you: sane decisions were made at its inception which may or may not be relevant any more. Ever wonder why it takes 100′s of MHz or GHz (sometimes clusters of same) based “sane software architecture” to replace a sometimes kHz based “mess”?

    Cheers all.

  • cantido says:

    >Do a quick search on Amazon for “assembler”

    Google -> Amazon Assembler

    Amazon.com: The Art of Assembly Language (0689145119725)

    ARM Assembly: Amazon.co.uk

    > /dig Well ..

    Meh.

    >>you don’t know assembler
    >>and you’re making an OS

    Ok

    >>who are not afraid of the assembler
    >>boogie man ;)

    So, there are MBAs that are involved in having OSes written, but don’t want any assembly.. how does that work? Also unless your OS is a tiny toy of a thing that is very specific to a certain application/piece of hardware you would only right parts that need to be written in assembly in assembly. So your argument still doesn’t work. Those evil MBAs you don’t like aren’t telling people to write operating systems in Perl or VB, don’t be so paranoid.

    >>GCC as a language just to be ironic right? :D

    C doesn’t generate bad code.. it doesn’t generate any code. GCC does, you can put LLVM’s C backend or SDCC in there if you want. However people complain a lot about GCC’s code generation.. they disassemble the code and then start saying “oh just look at this mess, GCC is crap, I am awesome” without looking at the bigger picture or any confidence in their “findings” to actually mention it to anyone that might matter. Presumably out of fear that they would get their ass handed to them.

    >>takes 100′s of MHz or GHz

    Writing stuff in assembly doesn’t magically make bad coders into good coders. You can code really shit code in assembly if you want.. modern machines are A: hellafast, B: designed to run code generated by high level language compilers that know how their pipeline etc work. If we take this OS as an example.. ok so you might save one machines worth of overhead in your cluster from having a bare metal environment.. but the cost of getting everything working sanely might be much more than 10 machines and that will only grow as you try to maintain it.. getting someone to write drivers for your obscure OS isn’t going to be easy or cheap. This is like cladding your house in ONE MILLLION US DOLLARS worth of solar cells and generating $500 dollars of electricity.

  • ASMcoder says:

    First off great project.
    But i have never heard so much rubbish, probably written by people that have never written anything in assembly.
    This OS for a start will not run any faster (in most cases slower) for 99% of the task’s that an OS needs to preform, it may do things like boot fast but thats just because of size.
    Writing apps is very easy and a lot of fun, thing’s like debugging are no problem when you have coded the whole OS yourself unlike higher level language’s every bit of code is in most cases written by you so when you find a bug or a problem you know that the problem is down to you , unlike higher level language’s where it could be hidden in some lib.
    The next miss conception is about portability, yes we know that asm is not very portable, but we are talking bare bones here i could port this OS as it stands to a ARM in less than three months and as every OS needs to be optimized for the processor that it runs on this works out better.
    I have spent ten years writing OS’s for many processor’s including x86 in full ASM, and the thing that non ASM programmers just carn’t seem to get there head around is that ASM is easy and fun and most of us do not use it to make things faster in most case’s its not, size is different that is one of the biggest advantages over higher level languages .
    Rant Over

  • anti-fanboi says:

    Gawd, it’s like explaining biology to a creationist, you really do need comments don’t you… or was that an attempt to be deliberately dishonest?

    //
    // Convention: comments follow statements.
    //

    Do a quick search on Amazon for “assembler”

    //
    // go to http://www.amazon.com in a web browser,
    // firefox is a good choice.
    // at the top of the page where is says “search”
    // from the drop down: select “book”
    // in the search text field: type “assembler”
    // click on “go” or just hit return on the
    // keyboard.
    //
    // on the first page you will find:
    //
    // MVS Assembler Language
    // by Kevin McQuillen and Anne Prince
    //
    // Assembler Language Programming for IBM and
    // IBM Compatible Computers [Formerly 370/360
    // Assembler Language Programming]
    // by Nancy Stern, Alden Sager and
    // Robert A. Stern
    //
    // Advanced Assembler Language and MVS
    // Interfaces: For IBM Systems and Application
    // Programmers
    // by Carmine Cannatello
    //

    You seem to be arguing with yourself now? I’m not bashing GCC so let it go OK. Compilers as a whole do the same thing. Here’s a hint: why is it that there are different levels of optimise and why are they flags and not always “on”?

    You also seem to think compilers are written by computing gods or voodoo or something? Ideally that would be the case (the gods not the voodoo) but life aint ideal.

    You’re obviously a smart guy so I expect one day you’ll get it, I can only try to show you not force you. I was young once and also knew everything, now I’m old and have better things to do ;)

    Cheers.

  • Olivier says:

    @ASMcoder: you should get a new pseudo because you don’t know assembly. You can’t port X86 asm in any ARM without rewriting the whole thing.
    So, it’ll take you much more than 3 months to port this OS to any other processor. And I’m sure you don’t know every specifics instructions of every processors, so it’ll take you a lot of time to understand every optimisations tricks of this OS.

    @anti-fanboi: here, you just proved you have never commenting anything. Comments are BEFORE the things to be commented, not AFTER.

  • Sam says:

    Holy crap, troll project has brought out the trolls in force…

  • ASMcoder says:

    @Olivier, Then what is this http://www.dex-os.com
    And i ported it to ARM in just over 6 months, my OS is 52k.
    Your telling me that a OS thats about 8k or 9k, can not be ported to ARM, in 3 months.
    We are not talking windows or linux here.

  • Ugly American says:

    From an economic point of view, the optimum effort for a widely distributed system and a boutique system are rarely the same. For something that will only run occasionally on a single machine, you might use any number of quick to develop languages. However, for an OS that runs on 100M machines many hours a day for years, saving $100M in development only saves $1 per installed instance and can easily waste more than $1 worth of additional power, RAM & HD overhead over it’s life cycle. This exists on a single coder level too. When coder productivity is measured in lines of code, they tend to gravitate toward Java & C++ where automated generator tools can puke out hundreds of lines a day that compile but do nothing useful. Slightly better coders will refactor already working code over and over adding no utility but introducing the possibility of new bugs. The buyers don’t understand the real cost. This is how big developers end up with bad programmers. This is how big companies end up with bad software.

    From a technical standpoint, most of the major theory problems were solved decades ago yet commercial implementors continue to reinvent the wheel badly sometimes though ignorance, sometimes to avoid patents and sometimes to lock in their own systems. For example, it has been proven that separate stacks for data and addresses is dramatically more secure than mixed stacks. That was known before the x86 was developed yet the x86 mixes them. The JVM is software written decades later but it makes the same mistake. It has been proven that 3 stacks can solve all computable processes. Most compilers remap to stacks and then remap to the mixed mess of stacks & registers on popular CPUs. JVM is software only but it copies the same bad x86 hardware design in software. Speculative execution may appear optimal for a single tasking benchmark but Cray figured out decades ago that when you have a branch in a multitasking environment it’s better to switch to unblocked code and continue running full speed while the conditional is resolved on the side. Total performance of the system is greater even though the single thread may be slightly less. It’s also a much simpler solution in hardware than hyperthreading to keeping pipelines full.

    The real problem in many cases is not technical but the entrenched economic interests that fight to keep their revenue extraction systems in place. That’s why real innovation usually comes out of small projects.

  • You can’t just run this on a propeller or a pic or an ARM. You obviously don’t understand the concept of machine code.

  • bowlinbd says:

    He was off by one in the number of primes because he skipped the number ’2′. He started his testing a3 and incremented by 2 each time because other than ’2′, all primes are odd.

  • Multician says:

    Ugly American writes:
    ————-
    Classic assembly OSs like MULTICS and the Burroughs MCP (of TRON fame) had huge advantages in that they were written on CPUs designed with multitasking, multiple users and networking in mind.
    —————

    In fact the overwhelming majority of Multics was written in PL/1, with only a few hundred lines of assembler. MCP is widely regarded as the first OS largely written in a high-level language.

    In general, the only time anyone other than a hard-core supervisor (essentially the Multics kernel, in fact the part that ran in ring 0) would need to write in ALM (the assembler) was for writing a “gate”, the program that allowed you to call code in an inner (i.e. more privileged) ring.

    And most of the HCS was written in PL/1 for that matter.

    Writing assembler code is something that every serious computer scientist should know, in principle, how to do,

    But, unless there is very, very good reason, they should never actually do it after graduation.

    The development time is too great and the maintainability is close to zero. As my students have heard me observe any time, assembler is a “write only” language.

    You can learn more at http://www.multicians.org/ – you can even browse the source code and count the lines of assembler if you want to…

  • DeeplyShrouded says:

    I remember Bill Basham writing a 7 line chat
    program for the Apple //e in assembler.
    I still have the program even though it’s going to
    be 28 years old this June.
    There’s a lot to be said for assembly language.
    I may not know the IBM stuff, but for me, there will
    always be a special place in my heart for the 6502.

  • Old duffer says:

    @Anne Nonymous – been there, done that. Google for TAOS or wikipedia for Tao systems / intent.

  • virgil says:

    A bit late to this game. http://www.menuetos.net/

    BTW it fits on a floppy.

  • wardy says:

    I think writing a usable OS in assembly is cool enough in itself, that’s a significant accomplishment. However I doubt anyone is really likely to adopt this as a serious number crunching platform. It is efficient NOW but it can only become less efficient over time as new modules are added and hardware support is needed.

    Forcing people to write device drivers or comms protocols in raw assembly is asking too much and will be prone to errors. Lets not forget that despite it’s many blemishes and imperfections, Linux (or any modern free OS) is actually already pretty well optimised where it counts.

    A+ for effort but I don’t expect we’ll hear much about this being taken up seriously by the industry any time soon.

    It’s still cool though.

  • darkore says:

    @wardy +1. Extremely cool project, but I just can’t see its real life applications.

  • zimm3rmann says:

    But can it run Crysis?

  • Bob Mackin says:

    The application demonstrated should be written in assembler for performance, but the OS could be written in a high level language and perform nearly as well. This is because there are few system calls and application interruptions required for this application.

    I’ve worked on assembler OSs, device drivers and application programs, and am a fan of assembler, in the right circumstance. Like many assembler programmers, I specialize in high performance, well organized programming.

  • Vigilante says:

    These would come in handy for complex calculations like robotics or autonomous UAV.. i think with 64bit you could calc all the algorithms much faster or even make newer, better ones that wouldnt even run on lesser hardware.. i am excited..
    and like that ‘dual’core arduino, if we do a 32bit shield for a 32bit processor, couldnt we run baremetal on it then?

  • wardy says:

    Another aspect of this is that the kind of people that would get the actual benefit of crunching numbers on such a scale are probably not those people capable (or indeed motivated) enough to actually write highly optimised assembly code better than your average optimising C compiler (GCC et al.)

    So your average science boffin wanting to simulate some new theoretical technology that produces anti-matter at room temperature from a 9v battery will have to hunt around for at least one speccy ASM nerd intimately familiar with this super-obscure OS. It’s just not going to happen.

  • Alan says:

    VMWare Server uses a mini-linux base, you could uddate that. Or change VMWare Workstation.

    Basically, streamline the path between (multiple) virtual machines and the hardware.

  • abobymouse says:

    There’s a bunch of reasons why most of the top500 clusters use RedHat or ScientificLinux.

    I’m glad there’s a couple of people here who know what they’re talking about.

  • Decius says:

    @MattE

    Thank you for answering, I didn’t know this was written for x86 exclusively.

    Well if there is an ARM port of an ‘ASM OS’ under 100k then put that on the PSP or RB26DETT “ECU”,ARM Boards – which ever xD

  • Dan says:

    Well seems like this could be used in computing clusters to process huge amounts of raw data such as the data CERN collects with their LHC

  • Huh? says:

    Here’s code that not only calcs the number of primes between 1 and 300,000 in less than a second, but returns a list of them. Also, it is running on a crappy desktop using Windows 7 and C#:

    public static List GeneratePrimesNaive(int n)
    {
    List primes = new List();
    primes.Add(2);
    int nextPrime = 3;

    while (primes.Count < int.MaxValue)
    {
    int sqrt = (int)Math.Sqrt(nextPrime);
    bool isPrime = true;
    for (int i = 0; (int)primes[i] n)
    break;
    }
    return primes;
    }

  • Megol says:

    Just look at the code, it’s not even close to optimal. A good compiler should generate better code and a good programmer using a good compiler should be able to get about the same memory footprint.

    Not trying to troll BTW.

  • Darron says:

    Okay, look… this -SHOULD- be a good lesson in the folly of programmer arrogance.

    I did 2 minutes of research to turn up a highly unoptimized C++ prime search function. I rigged it up to do this “from 3 to 300000 by 2s” test for primes, and what do I get?

    1000 passes in 51 seconds. 0.051 sec each pass.

    I think that says it all. If you can’t take a couple minutes to look up how to write a prime number test, how on Earth are we supposed to believe this OS is any good?

    If I can whip up something in 5 minutes via a Google search that outperforms your super tuned OS by a factor of 1300… what does that tell you about misdirected effort? (Although, to be fair I’m running on a 2.5GHz Core2 Duo vs. your 3.2GHz Pentium D… so maybe we should cut the performance factor in half or a third)

    Oh, and… how’s this for power usage. I cross compiled my crappy prime app for ARM and ran it on my custom 454MHz iMX283 ARM SBC running a pretty unoptimized Linux 2.6.35 platform and I get 5 passes in 19 seconds with SOFTWARE SQRT. It uses 1.25 watts to do this.

    So, 17.6X speed with a processor probably 20 times crappier than yours, using 144 times less power.

    I am ABSOLUTELY not claiming to be any good at any of this, either.

    You obviously have drive… go find a way to direct it more usefully and you can potentially go far.

  • IJ Dee-Vo says:

    those who can code a 64bit os small enough to fit in 16KB do. Those who cant, troll, complian, whine.

  • Toddo says:

    The A-Team was hired by Gawker Media to take down LulzSec. They did, but now Lulz has targeted a total takedown of Gawker Media.. this should be fun!

  • ashish says:

    i reckon they could use the OS in some small devices that could mimick a human using a computer – like say in AI laden military gadgets running 64 bit processors and this OS.

    but fairly enough, not many people would want to write assembly programs so this would have only rare or custom uses to people who might just see its real use

  • ashish says:

    @zimm3rmann

    man i just laughed my ass off at your comment

    i bet they could run crysis surely.. one who’s graphics would get displayed in characters

  • Luposian says:

    Anyone who is interested in working on making BareMetal OS more useful and functional as an end-user OS, reply. I have some interesting ideas…

    • ashish says:

      i have an idea of my own. Of making an OS which does exactly what we want to, well, and other necessary processes to support what we are doing, but none other then that, to save power and efficiently give a unique computing experience.

      From that, our laptops and tablets etc could go on for days on end on a single charge of a battery

      i could reveal a more of my idea if you are interested. But also let me know of what you were going to talk about.

      • Luposian says:

        The only way to achieve that, would be for the computer to only be working when we’re doing something. And then it goes into standby/hibernation as soon as it’s done doing that. The problem is, you have to see what the screen is showing, which requires power to display. and coming out of that “frozen” state takes a little while. If it were nigh instantaneous (1-2 seconds at most), it would be better.

        If you’re referring to the computer KNOWING what we want it to do, that is impossible… it can’t read our minds.

        My idea (or part of it), is to create a 64-bit version of the Atari ST’s OS (at least in similar appearance). The code is tight and fast. How fast would the Atari ST GEM interface operate if it were written in 64-bit assembly, on today’s 64-bit hardware? I’d say it would be BLINDING! And I’d love to see it!

        The other part is to create a 100% secure OS. And I mean, from EVERYTHING. Hack attempts, viruses, trojans, spyware, etc. Being an obscure OS (i.e. not Windows/MacOS X) is one way to insure you’re fairly safe, but it doesn’t protect you, entirely, if they decide to try and attack you.

        Now, true security is not achieved the way it’s being done now. You don’t stop viruses/trojans/spyware/hack attempts, etc. by intercepting what they LOOK like (code signatures, etc.). Oh, sure, you CAN (and it’s done this way), but this is an ongoing battle. New viruses, trojans, spyware, etc. require updates to the app to intercept those programs BEFORE they attack you. Sure, it’s job security (always writing new interceptions), but… what if you NEVER had to write any antivirus or spyware apps at all?

        This can’t be done with today’s OS… you’d have to totally rewrite them…

        But, with BareMetal OS… you don’t NEED to rewrite anything, because there’s almost nothing there! Few drivers and apps. Now is the perfect time to create an OS that is 100% secure, from every possible point of entry, from every possible type of attack.

        Impossible? Nope. Unless, of course, no one is willing to work on the OS to accomplish it.

      • ashish says:

        can you give an approximate measure of how many watts per process are used up in a Windows machine, say, running on Intel p8600 (thermal power dissipation=25W as seen on Wikipedia)

        i’ve seen from task manager->performance tab->resource monitor that explorer.exe uses 0.10 “Average CPU” (cycles?)
        i don’t know how i will calculate the dissipation in watts for that particular process.

        If you can give me that, i will tell you what i actually meant, by giving you paradigmatic introduction to my idea of an super energy efficient OS

  • Mattieu says:

    One of the problems with this type of thing it is capitalises on naivity obout what an operating actually is: It’s possible to write an OS in just a few hundred bytes of memory, not 16,384. All it needs to do is boot. Once you know how to write software to the boot-block you’re done.

  • Bo says:

    Assembler is a provoking language.What has all these whiners to loose by what you do.Nothing.What I think is a pitty is that few people has discovered HLA which is an assembler where you can go from high level to low level and faster than C and takes a little bit longer to develop.You can also use all levels in HLA from macro to micro.I also think a lot of good languagages are better for applications than all this overcomplicated mainstream shit like C,Python,Perl,C++,etc.Why not Assembler for basic work like the kernel and use simple to learn languages like Newlisp,Euphoria,Rebol,and possibly others that are efficient and easy to work with for applications.I think what you do is great and don´t give up because of these morons.

  • peter says:

    How hard would it be to adapt BaremetalOS to host other OS’s? So I could instantly switch from OS X to Windows to Linux etc without a cumbersome host OS + VM or multiple boot options as currently practiced. This is where I would go with BaremetalOS! One machine and multiple OS’s without any lag or rebooting. With today’s hardware and memory capacities I can see this is the next step in computing.

  • josh says:

    I have no idea what algorithm they are using, but I just wrote the following 20 some line brute force program in c++ and compiled WITHOUT optimization in gcc and it still runs in a tenth of a second…On a Pentium 4 :P I just don’t understand why it takes their program so long, especially since it is so “pure”.


    #include
    #include

    int main(int argc, char* argv[])
    {
    int count = 1;
    for ( int i = 3; i <= 300000; ++i )
    {
    bool prime = true;
    int root = 1+(int)(sqrt(i));
    for ( int j = 3; j < root; j+=2 )
    if ( i % j == 0 ) {
    prime = false;
    break;
    }
    if ( prime )
    ++count;
    }
    std::cout << count << std::endl;
    return 0;
    }

  • Leave a Reply

    XHTML: You can use these tags: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    Hack a Day serves up fresh hacks each day, every day from around the web as well as hacking related news.

    Send us your hacks






         




    Hacks

    Resources