I'm writing my own OS - <AUTHOR> http://gusc.lv/2012/11/im-writing-my-own-os/ <comment><USER3> Sigh, folks give the guy a break.

Sure he doesn't know what he doesn't know, but he has decided to fix that. Which, if you know your history, is not a whole lot different than Linus back when he was calling out Minix for being crap.

The challenge here is that the barrier to speaking on the interwebs is quite low so you can make a fool of yourself if you're not careful.

Jean Labrosse, who wrote uC/OS (which everyone called mucos), in his original thesis statement made many of these exact same arguments. And like your author he made some choices that he felt were reasonable, only to learn through experience that perhaps they weren't a well thought out as he had hoped.

I am a _huge_ fan of people just saying "How hard can it be?" and jumping in. Enjoy the ride, they can surprise you if you under estimate them.

So assuming this person notes that they are getting a ton of traffic from HN, and comes here to investigate, my three suggested books are :

Operating System Concepts [1], Operating System Implementation [2], and The Design of UNIX [3]. Preferably in that order. Any decent college library should have all three in the stacks.

[1] www.amazon.com/Operating-System-Concepts-Seventh-Edition/dp/0471694665/

[2] www.amazon.com/Operating-Systems-Design-Implementation-3rd/dp/0131429388/

[3] www.amazon.com/Design-Operating-System-Prentice-Hall- Software/dp/0132017997/

<comment><USER4> Agreed; the criticism here is way too harsh. In particular, I think it's somewhat amusing that people are giving him grief for wanting to "jump to C as soon as possible." Any rational kernel developer wants to jump to C as soon as possible -- and wants as much of the system to be in C as possible. (Indeed, this is the ethos that drove Unix -- and separated it from the horrifically unportable systems that predated it.[1])

Further, there are some good ideas here -- in particular, jumping directly to long mode allows one to avoid much of the replaying of the history of the PC that one is historically required to do to boot an x86. Most civilians (and I dare say, most of the negative commenters here) have NFI how ugly this process is and how much of a drag it is on future development. With the decline of the PC, it's reasonable to believe that a future is coming in which x86 becomes primarily a server-side microprocessor -- and begins to shed much of the baggage from the misadventures of the 1980s and 1990s.

All that said: there is a certain arrogance of youth here, and one hopes that when reality has sandblasted it away, the resulting humility will find its way to a formal computer science education and ultimately into professional software engineering; our discipline needs more people who have dared to write an OS from scratch, not fewer.

[1] <http://cm.bell-labs.com/who/dmr/cacm.html>

<comment><USER5> Very well said, particularly _our discipline needs more people who have dared to write an OS from scratch, not fewer_. Truth is that I've thought about doing what the OP is talking about, but quailed at the complexity of it.

That said, I'd be interested in making an OS that gets to _JavaScript_ as fast as possible. Yes the system would be a dog, but sure would be fun to build.

<comment><USER6> At least when it comes to systems programming, but probably across our whole field, most seeming impossibility has more to do with fear than real difficulty. I've spent a lot of time clumsily trying to paint a target on exactly what that fear is, but I've learned by having a lot of crazy stuff shoved into my face as a security researcher that if you can just get yourself to focus on a task and start coding, a lot of contraptions that seem so hard to build as to be implausible are actually the work of just a day or two; at least, the kernel of those contraptions (emulators, hypervisors, compilers, debuggers, drivers, interpreters, routing protocols, static analyzers).

If you have a basic aptitude for coding, not knowing how hard a task is isn't a liability; it's a powerful asset. If you haven't actually done real work on an OS, you _wish_ you thought it was as easy as this guy does.

<comment><USER7> When asked, "How could you possibly have done the first interactive graphics program, the first non-procedural programming language, the first object oriented software system, all in one year?" Ivan replied: "Well, I didn't know it was hard."

<http://en.wikipedia.org/wiki/Ivan_Sutherland>

Worth noting that the person that asked him this was Alan Kay.

</comment></comment></comment></comment></comment><comment><USER8> If any of you naysayer arsehats (you know who you are) bothered reading to the bottom of his article, you'd have seen that he has a section where you (if you do indeed know about OS development) could help him by answering his questions. I pasted it below for reference:

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

My research

What I've found out so far:

Boot sequence: BIOS;

Master Boot Record (MBR);

Bootloader – the program that takes it over from MBR and loads your Kernel;

Kernel. How to write your own MBR and write it to Disk on windows.

I've written a small utility in Visual C++ that allows directly to read/write from disk (download here, source included for Visual Studio 2010 Express);

How to write bare bones C kernel entry point.

How to write "naked" functions on Windows in Visual Studio

Missing link - I still don't know how to properly step from MBR to Bootloader to Kerlen, that is – write your own MBR code that would load bootloader, pass the execution to bootloader that would load and pass execution to bare bones C kernel:

What exactly is Global Descriptor Table (GDT) and Interrupt Descriptor Table (IDT), and how it looks in C and Assembly? How and when, and again how, if when is later (for example in Long Mode or Protected Mode) to set up all this GDT and IDT stuff. They say you have to set it up before the kernel. Then they say you can set it up with dummy values and set it up later in kernel. Then they say, that to set it up, you have to be in Real Mode, so your kernel (which might be way over 1Mb of real mode space), needs to switch between modes. And then if your kernel is over 1Mb, you can't access memory locations after 1Mb, and so on… It's confusing, but I'm going to find it out and post it here later on.

How to handle Interrupts in C? Will they perform as callbacks that await some return values or do I have to use inline assembly to process them correctly;

Is it possible to write MBR in C? I do understand that you still have to set ORG to 7c00h, and use some specific assembly instructions, but if they could be wrapped in C using inline assembly and C entry point can be glued with few lines of assembly code, why not?

</comment><comment><USER9> I almost didn't post this comment because it makes me sound like such a killjoy, but:

 _"I spend most of my days in the world of PHP, JavaScript (I love jQuery) and a little bit of HTML, CSS and ActionScript 3.0. I've done some hobby software development and also wrapped my head arround languages like C, C++ (except for templates), C# and Java."_

It sounds like you don't have the experience required to make an OS. I certainly don't either (I'm no C-head) so I am in no position to snark, but you're going to fail in this endeavour.

That doesn't mean it's pointless, though- I think it'll be a tremendous learning experience in getting to grips with the core of how computers _actually_ work. So, good luck. Just don't go thinking you're going to make the next Linux out of this.

EDIT: It's also important to note that the author didn't submit this to HN. He didn't say "take this, HN amateurs!", he just posted something on his blog that someone else picked up.

<comment><USER5> You know what, if you have hesitation about posting something, then you probably shouldn't. It's one thing to have a specific concern about his project, but it's _quite another_ to call into question his skill as a programmer and indeed quite arrogant to assume that you know what it takes to build an OS.

There is a big difference between saying "You don't have what it takes" and saying, "I think the obstacles you face will be very large, good luck!"

<comment><USER9> _quite arrogant to assume that you know what it takes to build an OS_

With all of the (largely web/app-centric) development work that I have done, there are numerous concepts in OS development that baffle me. I don't claim to know what it takes to build an OS, but I know that it is beyond me.

Also, I wasn't questioning his skill as a programmer, I was questioning the undertaking that he is discussing. _Any_ solo developer would struggle to create an OS (especially when they have a full time job to contend with), let alone someone that is going to have to learn a lot along the way. So my suggestion was to go ahead, but treat it as a learning experience rather than a deliverable product.

<comment><USER10> Everyone that ever created an OS from scratch had to learn first. The only question is how long it will take, but there is no reason to say "you will fail".

</comment></comment></comment></comment><comment><USER11> I think people are being overly pessimistic. It's not _that_ ambitious of a project (particularly a hobby project at that). Why? Well, he doesn't have to support thousands of different drivers and hardware configurations -- he only needs code that supports his own. That eliminates a good chunk of the OS code.

Second, a lot of grunt-code can be found in open source projects, so most of the tedious/time-consuming programming can be eliminated if he chooses to follow this option.

Drop preemptive multitasking, cache-optimization, modes, virtual memory, and networking and there's not too much left.

And finally, it doesn't take that long to understand the GDT. Mine became corrupted once so I took a day to learn how it worked -- fixed that crap in a hex editor.

So no, he's probably not going to invent the next highly polished OS that handles every edge case and has been rigorously tested against bugs, but then again I don't think it's unreasonable to see a simple little functional OS.

<comment><USER12> Sounds like you still don't understand the GDT :) [1]

I agre with you, though. As with any hobby project, picking the bits that are interesting or fun makes it easy to keep going.

[1]<http://en.wikipedia.org/wiki/Global_Descriptor_Table> (maybe you're thinking of the GPT?)

<comment><USER11> D'oh. Slaps forehead.

</comment></comment></comment><comment><USER13> Most of the comments seem so negative... When I was 16 I was also interested in OS development and actually wrote a bootsector, a very small kernel and support for fat12 in assembler. Previous experience? Basic and QBasic. It's quite a good way to learn and it is possible when you take one step at a time and are willing to spend some time reading... Your mind is a great tool, have some faith in it.

</comment><comment><USER14> Oh dear... overly ambitious plans, changing everything for the sake of change, fearing assembly, using VS for OS development, and not even knowing how the GDT and IDT work. There's so much wrong with this I don't even know where to begin. I sense a doomed project.

<comment><USER15> > using VS for OS development

What does Microsoft use?

<comment><USER16> the last I heard (3-4 years ago), the OS/kernel team used emacs. the kernel group has its own build infrastructure that is partially / mostly exported in the DDK.

<comment><USER17> Untrue! I know "kernel people" who use Vim, too! :-)

However, my impression is most of them edit code in MSVC, build with the DDK tools, and debug with windbg/ntsd/kd like most other driver developers.

</comment></comment></comment></comment><comment><USER18> I don't think writing your own OS is as difficult as people are saying. You're not trying to compete against Windows or Linux, you just want to get something up and running. I'm sure bugs and crashes will be prevalent, but I'm sure it would be a great project.

A really, really good book for this that I've read is "Developing Your Own 32-Bit Operating System" by Richard Burgess. It starts you from the beginning, and walks you through all the steps in writing a really basic OS.

It's old and out of print, but it's definitely the best one I've seen.

Edit: I just found the website, they are offering the book free here:

<http://www.ipdatacorp.com/mmurtl.html>

<comment><USER19> I've wrote my own OS back in the late '90s based heavily on this book. Probably one of the best learning experiences I've had. I'm not sure how relevant it is today. I'd love to see a second edition brought up to date.

</comment></comment><comment><USER20> Please read Linus Torvald's book "Just for Fun: The Story of an Accidental Revolution" [http://www.amazon.com/Just-Fun-Story-Accidental- Revolutionar...](http://www.amazon.com/Just-Fun-Story-Accidental- Revolutionary/dp/0066620732). It mostly deals with his experience building Linux and the insane amount of work it took (he was a student at the time he wrote the first version, with the help of hundreds of other people via distributed development). It might give you some additional insight into the effort involved.

</comment><comment><USER21> > How to handle Interrupts in C? Will they perform as callbacks that await > some return values or do I have to use inline assembly to process them > correctly;

Not to disappoint you, but you should try doing some more low level programming or dabbling with some existing OS code to have an idea how this kind of programs look like. Maybe having a look at Minix for a reference of simple OS?

Have you thought about targeting ARM? Its architecture may be way less trickier than most Intel CPUs.

Well, good luck with that. Worst case scenario, you'll end up reading lots of interesting resources.

<comment><USER22> > Have you thought about targeting ARM? Its architecture may be way less > trickier than most Intel CPUs.

Can anyone comment on whether this is really true?

<comment><USER21> When comparing the Intel 64 [1] and ARMv6[2] instruction sets that's a quite trivial assumption. The difference on the number of instructions implemented by those architecture reflects well the complexity gap between both.

Also, there are many other details that make targeting ARM much easier, for instance the bootloading process on ARM is more straightforward with no BIOS or EFI involved[3].

1: [http://download.intel.com/products/processor/manual/325462.p...](http://download.intel.com/products/processor/manual/325462.pdf)

2: [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0432c/CHDCICDF.html)

3: <http://www.keil.com/download/docs/52.asp>

</comment></comment></comment><comment><USER23> Wow!!

Too ambitious. Doing that requires millions of dollars and tens of thousands of man hours to make. How do I know? I do electronics and low level programming work and I am really good at it. Just understanding the bugs that manufactures put in hardware and then solve in software(because it is way cheaper) takes a ton of work.

As I suppose he is not super rich, he will have to convince people to join their project, a la Linus.

Good luck with that!! I really wish a clean-no backwards compatible OS were real, I will add native OpenCL, OpenVG and OpenGL to the list, but my arachnid sense tells me a person that does not use Unix will have a hard time getting traction with geeks.

</comment><comment><USER24> UPDATE: The original author has posted a Part 2. Looks like he's already started writing code and hitting milestones. <http://gusc.lv/2012/11/im- writing-my-own-os-p2/>

</comment><comment><USER25> Anyone who has ever written a small RTOS on a small 8 bit embedded processor will only laugh at the OP. And, I hate to say, it would be justified. There are about twenty or thirty books between where he is now and where he'd have to be in order to even start talking about designing an OS for a desktop platform. Add to that 10,000 hours of coding low to high-level projects across embedded to desktop platforms.

A quick read of the "About" page is probably in order:

<http://gusc.lv/about/>

What to say?

"Someone holding a cat by the tail learns something he can learn in no other way" --Mark Twain.

Here's the tip of the tail:

[http://www.amazon.com/Embedded-Controller- Forth-8051-Family/...](http://www.amazon.com/Embedded-Controller- Forth-8051-Family/dp/0125475705)

[http://www.amazon.com/Operating-System-Concepts-Abraham- Silb...](http://www.amazon.com/Operating-System-Concepts-Abraham- Silberschatz/dp/1118112733/ref=dp_ob_title_bk)

[http://www.amazon.com/Performance-Preemptive-Multitasking- Mi...](http://www.amazon.com/Performance-Preemptive-Multitasking- Microprocessors- Microcontrollers/dp/0982337531/ref=sr_1_2?s=books&ie=UTF8&qid=1353963610&sr=1-2&keywords=micro+c+os)

[http://www.amazon.com/Design-Operating-System-Prentice- Hall-...](http://www.amazon.com/Design-Operating-System-Prentice-Hall- Software/dp/0132017997/ref=sr_1_3?s=books&ie=UTF8&qid=1353963814&sr=1-3&keywords=operating+systems+design+and+implementation)

Have fun.

<comment><USER26> From a previous comment of yours: "Every new programmer needs to start with C. In fact, I am convinced that every new programmer needs to start with C and be tasked with writing an RTOS on a small memory-limited 8 bit processor. And then write several applications that run within that RTOS."

He is not that far off from your suggestions. Why do you think 8bit and realtime is better than AMD64? The architecture is a lot more complicated. On the other it is probably much better documented as well.

<comment><USER27> > Every new programmer needs to start with C.

Wow, what an idiotic thing to say. C is one of the worst languages for learning the actual fundamentals of programming, which are algorithms and data structures.

<comment><USER28> Coding algs and data structures in C lets you see how those things _actually work_ in the computer. A lot is hidden by the abstractions of higher-level languages.

In particular, I am thinking about pointers and memory management, but there are other things.

<comment><USER25> Yup. Exactly why I think C is a great starting point.

This is also why I think we have so much bloated code these days. Everything has to be an object with a pile of methods and properties, whether you need them or not. Meanwhile nobody seems to be able to figure out that you might be able to solve the problem with a simple lookup table and clean, fast C code. There was a blog post somewhere about exactly that example recently but I can't remember where I saw it.

I wrote a GA in Objective-C because, well, I got lazy. Then, after seeing the dismal performance I got I re-coded it in C. It's been a couple of years but I think that the performance was hundreds of times faster than anything the optimized Objective-C code could achieve. The heavy bloated NS data types just don't cut it when it comes to raw performance.

Someone who has only been exposed to OO languages simply has no clue as to what is happening when they are filling out the objects they are creating with all of those methods and properties or instantiating a pile of them.

<comment><USER27> > This is also why I think we have so much bloated code these days.

'Bloat' is a snarl term. It's meaningless. It literally means nothing, except to express negative emotion.

> I wrote a GA in Objective-C because, well, I got lazy. Then, after seeing > the dismal performance I got I re-coded it in C.

Did you try any other algorithms? Any other data structures? Simply picking a new language is laziness.

<comment><USER25> No, it's not a snarl term. It's very real.

When dealing win an array is 400 times slower in a "modern OO language" then in raw C, well, the code id fucking bloated.

When you can use a simple data structure and some code to solve a problem and, instead, write an object with a pile of properties and methods because, well, that's all you know, that's bloated code.

Of course there are lots of places where OO makes absolute sense. And the fat and slow code is the compromise you might have to make. That's the way it goes.

With regards to my GA example. No, I had to implement a GA. That's what was required to even attempt to solve the problem at hand. Later on we used it to train a NN, which made the ultimate solution faster. But, the GA was required. There was no way around it and Objective-C was such a an absolute pig at it that it made it unusable.

> Simply picking a new language is laziness

See, there's the difference. I started programming at a very low level and have experienced programming languages and approaches above that, from C, to C++, Forth, Lisp, APL, Python, Java, etc.

I have even done extensive hardware design with reconfigurable hardware like PLD, PLA's and FPGA's using Verilog/VHDL. I have designed my own DDR memory controllers as well as raw-mode driver controllers and written all of the driver software for the required embedded system. My last design was a combination embedded DSP and FPGA that processed high resolution image data in real time at a rate of approximately SIX BILLION bytes per second.

So, yes, I am an idiot and make really fucking dumb suggestions.

Because of that I would like to think that, if the choice exists --and very often it does not-- I do my best to pick the best tool for the job.

More often than not, when it's pedal-to-the-metal time C is the most sensible choice. It used to be that you had to get down to assembler to really optimize things, but these days you can get a way with a lot if C is used smartly.

<comment><USER27> > When dealing win an array is 400 times slower in a "modern OO language" then > in raw C, well, the code id fucking bloated.

Social science numbers do not impress me. Besides, what is a "modern OO language"? Haskell? How can you give any numbers without even specifying that detail?

> Of course there are lots of places where OO makes absolute sense. And the > fat and slow code is the compromise you might have to make.

Your idea that "OO = fat and slow" is blown away by actual benchmarks.

<http://www.haskell.org/haskellwiki/Shootout>

(And, yes, unless and until you define what "OO" is to you, I'll pick Haskell as a perfectly reasonable OO language. Given than I've seen C called OO by people with better writing skills than you, this is hardly a strange choice in this context.)

> So, yes, I am an idiot

Again, I did not call you an idiot. The only one calling you an idiot here is you.

> More often than not, when it's pedal-to-the-metal time C is the most > sensible choice.

I agree fully with this. However, I disagree that "pedal-to-the-metal time" is all of the time, or even most of the time. _Especially_ when you're trying to teach programming.

Do you teach new drivers in an F1 racecar? Why or why not?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER29> Looks like you haven't even started thinking about the problems you'll run into architecting the actual mechanisms and policies of the operating system; process scheduling, virtual memory, etc. That's probably for the better—one thing at a time. For when you do get to that stage, I recommend Operating Systems: Three Easy Pieces. <http://pages.cs.wisc.edu/~remzi/OSTEP/>

</comment><comment><USER30> Holly jumping Jesus … I just got my 15 minutes of shame/fame over the internet. I linked my "just write down what you're thinking" blog post on dzone.com and somehow it got posted on Hacker News and from there … Shit just hit the fan. It seems that writing "I'm writing my own OS" as a blog title can be translated from "I have spare time, I want to try out new things" into "Fuck this shit, I'm going for a revolution!!!" It's time consuming to answer all the comments I've gained, so I'm writing this post as an answer to all of you.

<http://gusc.lv/2012/11/im-writing-my-own-os-intermission/>

And thank you again for inspiration (even the cynicism is inspirational ;)

</comment><comment><USER31> Nope. If you want to know how to make a small OS that can run on a PC, take a look at xv6 which is a modern re-implementation of the sixth edition of Unix and is on Github. You can compile it and then run it in qemu. Fork it, read and understand the source and then expand upon it to your hearts content. That would at least give a very good starting point.

</comment><comment><USER32> There is a surprising amount of negativity coming from what I expect to be a 'hacker' crowd. This kid (he's 30 can I call him a kid?) has ambition and what appears to be the drive to create his own OS - I mean, if you read the bottom of his page, he did some research (sure, wiki-ing them is not equal to actually understanding them), but it at least shows willingness to learn, and we should not be putting him down at all.

Sometimes the HN crowd surprises me. We pride ourselves in being hackers, most often idealistic (bitcoins and patent law change anyone?) but when a singular person shows idealistic ambition, we immediately engage in poppy cutting.

Sigh.

<comment><USER33> I think his enthusiasm and attempts are good things.

But. His post is just that - his expression of enthusiasm. There's not much of anything else here yet. We have nothing to discuss but his enthusiasm.

Having seen these kinds of ideas consistently end up as "well... it got hard" a week later, it triggers my grumpy "sure whatever let me know how it goes in a month" reflex.

</comment></comment><comment><USER34> I'll be following this. Don't listen to the hate -- dive in, I'm sure you'll learn a ton, and maybe build something useful for yourself and others.

This is the exact definition of hacking, if you ask me.

</comment><comment><USER16> Implementing an OS is hard work, even if you build on the very hard work of those who have tried before you in terms of APIs, abstraction layers, etc. It doesn't sound like you have a lot of familiarity with low-level software development, or software development in general, so you just took a "hard mode" project and cranked it up to "nightmare".

Generally this is a bad idea because without any external motivation, you lose interest and stop working. With external motivation is worse, because you can burn out and become a catatonic shell of a person, staring absently into space for the rest of your life.

Just some FYIs:

> On the side note - It's 21st century, but our PCs are still booting up as > old-fart Intel 8086.

You should read about EFI ([http://www.intel.com/content/www/us/en/architecture-and- tech...](http://www.intel.com/content/www/us/en/architecture-and- technology/unified-extensible-firmware-interface/efi-homepage-general- technology.html))

You should also read all of the lecture materials from good universities OS classes. In those classes, you basically do this. Some classes are more guided than others. Some places to start:

\- CMU: <http://www.cs.cmu.edu/~410/>

\- UMD: <https://www.cs.umd.edu/~shankar/412-F12/>

UMD uses a toy operating system called GeekOS that the students extend. You might find browsing its source code useful (<http://code.google.com/p/geekos/>)

Good luck!

<comment><USER35> There are a bunch of teaching OSes which are a great place to start for this stuff.

The actively developed ones we chose between when teaching the OS class at UW this fall were:

JOS (mit) <https://github.com/guanqun/mit-jos>

Pintos (stanford) <http://www.stanford.edu/class/cs140/projects/>

OS161 (harvard) <http://www.eecs.harvard.edu/~syrah/os161/>

</comment></comment><comment><USER36> This is pretty interesting. I find this type of behavior to be everywhere in the software world. If I cannot figure something out with a platform, let me re-write it. Interesting observation is that the number of these "re-writes" is inversely proportional to the experience of the person proposing these ideas.

Good luck to the author, nonetheless it will be a good learning experience for him.

<comment><USER37> Also interesting is that once you start re-writing and bump into hard issues, you decide to take a peek at how others have solved them, you eventually find yourself understanding the platform you're trying to re-write and realize that maybe that platform is not as bad as you thought it were.

"Those who don't understand Unix are condemned to reinvent it, poorly."

</comment></comment><comment><USER25> On threads such as this one it is easy --and even popular-- to dump on those, such as myself, who come down on the "nay" side, even when this is firmly based on experience and having made plenty of mistakes in the field.

The linked article does NOT talk about a one-semester school project or a quick-and-simple learning OS.

No, the article talks about a web developer with no real experience writing low-level code not only wanting to bootstrap every single device driver but also ignoring years of accumulated knowledge and code libraries to write an OS that boots directly into graphical mode, does not take advantage of POSIX and more.

There's nothing wrong with the "How hard can it be?" approach to learning. I've done this many times. And almost every single time I came away with "I sure learned a lot, but what the fuck was I thinking?". The last time I pulled one of those was about fifteen years ago and the "three month project" took nearly two years.

What he is talking about is more complex than writing the Linux kernel from scratch because he wants to re-invent everything. Here are some stats on the Linux kernel:

[http://royal.pingdom.com/2012/04/16/linux-kernel- development...](http://royal.pingdom.com/2012/04/16/linux-kernel-development- numbers/)

Even if his project was 10% of this it would still be a grotesque miscalculation for a single developer, otherwise employed and without the experience to back-up some of what he is proposing.

If, on the other hand, the post had suggested something like this it would have been far more reasonable an idea:

"Hey, I just spent a year implementing everything in the Tanenbaum book. Now I would like to start from that base and enhance the OS to make it do this...".

Let's compare notes in a year and see how far he got.

</comment><comment><USER38> I could have guessed this would turn into a massive flamefest, but c'mon people. So what if he's green? This will be a learning experience for him. And I'll hazard that in the end, even if he never ends up writing a whole OS from scratch, that he will have gained more valuable low level experience than the vast majority of those here.

</comment><comment><USER39> I agree that this project is hugely ambitious for one man. So was Linux. Linus recruited a bunch of other hobby programmers to help him make it. Although he may be jumping the gun on announcing it, he's got a lot of good ideas about stripping back all the obfuscation that's resulted from 30 years of stacking things onto the same old conventions and wiggling them around until they fit.

I'm sure the idea of building a modern OS that is straightforward and written in a simple, popular language like C (and possibly Python later for higher- level stuff) will appeal to a wide range of people who will all want to help. I'd love to see this project happen, and if the day comes where Gusts is calling for help, I'll be right there in line to help him make this.

</comment><comment><USER40> The Unix/Linux systems are designed by a lot of very smart people and have gone through many iterations. No doubt they do have some historical baggage, but, there are good reasons why the current design is as-is. Not trying to learn the history will doomed to repeat it.

</comment><comment><USER41> "I still don't understand the meaning and differences between /bin, /usr/bin and /usr/local/bin"

Oh. OK, then.

</comment><comment><USER42> I hope you know plan9 or other OSes beside *nix/POSIX so you have a larger field of view.

If I had crossed the desire threshold to start that project (#1 project in my mind since I left college) I'd leave the C ecosystem altogether, design a typed ,functional ,binary friendly, modular, subset of C (and probably be forever alone). Something in the groove of <http://en.wikipedia.org/wiki/BitC>, even though its talented author concluded it wasn't a successful path.

</comment><comment><USER43> I think his critique of linux files layout and other points made are completely spot on. Me and I am sure others often were thinking how it would be great if things were different. I happen to know why those folders are named as they are, and they are completely arbitrary. He also started on it, did some initial progress. So he did a php before, boo-hoo.

I would prefer he decided to fork linux and change things he didn't like, then start from skratch. However, there is a great value starting from scratch. I wish I had a life :) to join him and figure out things together, it would be a blast, how many times in your life you have a chance to work on actual modern OS.

I believe it is totally possible for him to accomplish what he started, if knowledgeable people would join him and work with project together. Today with amazing tools, it is good time to create a new OS that would have modern tooling.

I wrote recently on my blog about a need for developer distribution of linux. Strangely this is still missing. [http://softwaredevelopmentinchicago.com/2012/10/17/ubuntu- al...](http://softwaredevelopmentinchicago.com/2012/10/17/ubuntu-all-the- missed-chances/)

It is great that we are discussing this. That is how things start.

</comment><comment><USER44> Short advice: find a compiler that supports modern decent C (C99), NOT VS (<http://www.infoq.com/news/2012/05/vs_c99_support/>) - may not be relevant for your kernel code that much, but at least at the end of your adventure you will have learned how to write good modern C (and no, C it not dead and replaced by C++, they are languages with different philosophies and used by different kinds of programmers and they are both evolving on they own route, despite FUD originating from Microsoft and other sources)

...and when you reach to the GUI part, do the same for C++, use the latest version and language features: I've heard that VS2012 lasts upgrade got closer to it, but google around before settling on it

...or to keep it simpler: better use GCC compilers (since the Linux kernel is built with it, you should find enough compiler specific docs and related tools too)

</comment><comment><USER45> Take care when writing your own bootloader, or you may find yourself essentially maintaining two separate kernel trees.

</comment><comment><USER46> I love little thought experiments like this, so heres my 2 cents:

1\. Targeting a modern architecture is good, but if I were being this ambitious, I would wager having such a backwards compatable burdened architecture like x86_64 (even when it is highly performant just through raw funding dollars) I would still rather start at square 1 on some risc 64 bit virtual 48 bit physical word system. Go even further, and design such a hardware ecosystem with heterogeneous computing built into the foundations - have arbitrary numbers of ALUs and FPUs and have different pipeline structures allowing for various degrees of SIMD parallelism across some tightly integrated weak cores and more heavily pipelined and bulkier serial cores, and have an intelligent enough instruction set to allow for scheduling (or even better, the hardware itself) to recognize parallel tasks and execute them with varying degrees of parallelism. Take AMD Fusion or Tegra to the next level and instead of having a discrete gpu and cpu on one die mash them together and share all the resources.

2\. I'd kick C out. If I'm going with a new architecture, I need to write the compiler from scratch anyway. I might consider LLVM for such a system, just because the intermediary assembly layer is intentionally lossless and allows for backwards language compatability with everything under the sun right now. But ditch C, take modern language concepts from C++, Python etc, and cut down on the glyphic syntax and try rethinking the distribution of special characters (I think pointer<int> c makes more sense than int (star)c, for example - go even further, and provide 3 levels of verbosity for each concept, like pointer<int32> c, ptr<int32> c, and &:i32 c). I would definitely want to fix standard type sizes at the least, having things like i32 integers instead of the int type being 16 or 32 bit, etc, with some more modern niceities like the D style real float that uses the architecture restricted maximum FPU register size).

3\. Screw UEFI, mainly because it is a design by consortium concept - it is inherently cumbersome because it was a commitee project between industry giants rather than a revolution in booting. I do like cutting down on legacy interfaces, I'd go even further and try to minimize my system to (in theory) one serial transport and one digital, maybe 4, with unidirectional and bidirectional versions of both, and maybe support for some classic analog busses (like audio, which doesn't make much sense to transport in digital format, although I haven't looked into it much). Everything plug and play, everything attempting to provide power over a channel so you don't need additional power connectivity if you can avoid it. For the BIOS, I would replace it with some metric of scan busses for profiles -> incite some kind of device-wise self test -> provide device information in memory to the payload binary, to allow memory mapping and all the other goodness. Maybe even have the bios itself act as a sub-kernel and provide the mapping itself. Maybe even fork the kernel, and treat it like some kind of paravirtualized device environment where the bios never overrides itself with the payload but instead stays active as a device interface. Saves a lot of code redundancy between the two then. It would of course have an integrated bootloader and the ability to parse storage device trees for some bootable material. Maybe have file system standards where each partition has a table of pointers to loadable binaries somewhere, or maybe stick them in some partition table entry (obviously not a FS expert here).

4\. Screw URIs, go straight for a kernelwise VFS that can reference _everything_. I'd love to see /net/<IP address>/ referening the top level of some remote servers public resources. You could have a universal network protocol where each connection is treated as a virtual mount, and individual files (and everything is a file, of course) can dictate if they use streamed or packet based data off some network transaction about the base protocol. So instead of having <http://google.com>, you could use /net/google.com/ which when opened does DNS resolution in the VFS to 220.127.116.11 (well, ipv6, obviously - we are talking about a _new_ OS here, so 2001:4860:8006::62 - <USER2> as a side note, I would _never_ try to get rid of IP as the underlying transport protocol - as insane I might be about redesigning hardware and rethinking stuff people much smarter than myself came up with, I know you will _never_ ursurp IP as _the_ network trasport everyone uses to connect the world ever). And then when you open google.com/search, you open a remote file that interprets the "arguements" of ?q=baconatorextreme on the extension into the returned page file that you access.

I agree with getting rid of Unix directories, they are outdated crappy, and all their names make no sense. However, /bin is meant to be system required binaries to boot, where sbin is root utility binaries, /usr/bin is general purpose executables that might not be local to the machine and might be a remote mount, and /usr/local/bin is the local machines installed binaries. Of course these polcies are never abided by, and they still have /etc, /usr/games, and a bunch of other folders to make life a hassle.

That's enough rates for a HN comment thread though, I'll stop and spare y'all :P

<comment><USER47> > I would still rather start at square 1 on some risc 64 bit virtual 48 bit > physical word system.

A friend of mine wrote a little OS (similar to vxWorks) for 64-bit MIPS in the 90s; I helped him debug a couple of problems. This was actual production code to go in a product (our employer was too cheap to license vxWorks for the secondary processor in the product).

It's incredibly easy to get something up and running on an architecture like this. (Admittedly he cheated by virtue of not needing to interface with hw to get loaded -- everything gets much easier when your EEPROM is wired to the boot vector.) Get your kernel data structures set up, handle interrupts, and BOOM! you've got multitasking. (I think it took him about a week.)

</comment></comment><comment><USER48> I am reminded of <http://www.sparrowos.com/> (aka losethos).

</comment><comment><USER49> I'd like to see someone try re-inventing a minimalist userspace. Create an OS running on the Linux kernel without coreutils, binutils etc., and see how far you can go.

If you strip out loadable module support and such, is it possible to boot without the usual POSIX support structure? Without filesystems?

<comment><USER50> I ported Linux to an embedded system that booted straight into ash (minimal shell). Other than ash, it only had custom applications. We didn't bother with a separate init app even - ash served that role sufficiently well.

Linux has very minimal requirements of userspace - pretty much you need to have a process that will act as your init process that knows to wait to clean up any zombine processes now and again. The rest is pretty much up to how you want to organize things.

</comment></comment><comment><USER51> Writing new OS entirely from scratch? without any intention to rely on some useful parts of previous projects? This is literally what we call "Reinventing The Wheel", and if you go through human history you will find that this is absolutely NOT the best way of development.

<comment><USER38> If that were true then there would only be one wheel design in all of human history.

</comment></comment><comment><USER52> As many people here said, this guy may not know what he doesn't know. But I am admiring his braveness and it is good thing for someone to shoulder off all legacy burdens and start a fresh OS.

As a developer, I have similar feeling on softwares including OSes, and I started a fresh vector editor project(Torapp guilloche online designer <http://www.torapp.info>), I know a vector editor is much simpler than an OS, but it is also pretty complicated. When designing the editor, I learned a lot and changed designs multiple times. I am sure that guy will learn and even if he can not complete an OS, he may leave some well-designed code base for other people to start with.

</comment><comment><USER25> OK, if you don't have any real experience in low-level embedded coding (relevant to device drivers), RTOS or OS design in general, file systems, data structures, algorithms, interfaces, etc. And, if you have "hobby level" experience with Assembler, C and C++. And, if your intent is to write a desktop OS, from the ground up, without making use of existing technologies, drivers, file systems, memory management, POSIX, etc. Here's a list of books that could be considered required reading before you can really start to write specifications and code. Pick twenty of these and that might be a good start.

In no particular order:

1- [http://www.amazon.com/C-Programming-Language-2nd- Edition/dp/...](http://www.amazon.com/C-Programming-Language-2nd- Edition/dp/0131103628/ref=pd_bxgy_b_img_y)

2- [http://www.amazon.com/The-Answer-Book-Solutions- Programming/...](http://www.amazon.com/The-Answer-Book-Solutions- Programming/dp/0131096532/ref=pd_sim_b_2)

3- [http://www.amazon.com/The-Standard-Library-P-J- Plauger/dp/01...](http://www.amazon.com/The-Standard-Library-P-J- Plauger/dp/0131315099/ref=pd_sim_b_3)

4- [http://www.amazon.com/C-Traps-Pitfalls-Andrew- Koenig/dp/0201...](http://www.amazon.com/C-Traps-Pitfalls-Andrew- Koenig/dp/0201179288/ref=pd_sim_b_8)

5- [http://www.amazon.com/Expert-Programming-Peter-van- Linden/dp...](http://www.amazon.com/Expert-Programming-Peter-van- Linden/dp/0131774298/ref=pd_sim_b_2)

6- [http://www.amazon.com/Data-Structures-In-Noel- Kalicharan/dp/...](http://www.amazon.com/Data-Structures-In-Noel- Kalicharan/dp/1438253273/ref=pd_sim_b_9)

7- [http://www.amazon.com/Data-Structures-Using-Aaron- Tenenbaum/...](http://www.amazon.com/Data-Structures-Using-Aaron- Tenenbaum/dp/0131997467/ref=pd_sim_b_2)

8- [http://www.amazon.com/Mastering-Algorithms-C-Kyle- Loudon/dp/...](http://www.amazon.com/Mastering-Algorithms-C-Kyle- Loudon/dp/1565924533/ref=pd_sim_b_14)

9- [http://www.amazon.com/Code-Complete-Practical-Handbook- Const...](http://www.amazon.com/Code-Complete-Practical-Handbook- Construction/dp/0735619670/ref=pd_sim_b_53)

10- [http://www.amazon.com/Design-Patterns-Elements-Reusable- Obje...](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object- Oriented/dp/0201633612/ref=pd_sim_b_3)

11- [http://www.amazon.com/The-Mythical-Man-Month-Engineering- Ann...](http://www.amazon.com/The-Mythical-Man-Month-Engineering- Anniversary/dp/0201835959/ref=pd_sim_b_11)

12- [http://www.amazon.com/The-Programming-Language-4th- Edition/d...](http://www.amazon.com/The-Programming-Language-4th- Edition/dp/0321563840/ref=pd_sim_b_5)

13- [http://www.amazon.com/The-Standard-Library-Tutorial- Referenc...](http://www.amazon.com/The-Standard-Library-Tutorial- Reference/dp/0321623215/ref=pd_bxgy_b_text_y)

14- [http://www.amazon.com/API-Design-C-Martin- Reddy/dp/012385003...](http://www.amazon.com/API-Design-C-Martin- Reddy/dp/0123850037/ref=pd_sim_b_6)

15- [http://www.amazon.com/The-Linux-Programming-Interface- Handbo...](http://www.amazon.com/The-Linux-Programming-Interface- Handbook/dp/1593272200/ref=pd_sim_b_8)

16- [http://www.amazon.com/Computer-Systems-Programmers- Perspecti...](http://www.amazon.com/Computer-Systems-Programmers-Perspective- Edition/dp/0136108040/ref=pd_sim_b_1)

17- [http://www.amazon.com/System-Programming-Unix-Adam- Hoover/dp...](http://www.amazon.com/System-Programming-Unix-Adam- Hoover/dp/0136067123/ref=pd_sim_b_4)

18- [http://www.amazon.com/Memory-Programming-Concept- Frantisek-F...](http://www.amazon.com/Memory-Programming-Concept-Frantisek- Franek/dp/0521520436/ref=pd_sim_b_2)

19- [http://www.amazon.com/Memory-Management-Implementations- Prog...](http://www.amazon.com/Memory-Management-Implementations-Programming- Development/dp/1556223471/ref=pd_sim_b_3)

20- [http://www.amazon.com/UNIX-Filesystems-Evolution-Design- Impl...](http://www.amazon.com/UNIX-Filesystems-Evolution-Design- Implementation/dp/0471164836/ref=pd_sim_b_16)

21- [http://www.amazon.com/PCI-System-Architecture-4th- Edition/dp...](http://www.amazon.com/PCI-System-Architecture-4th- Edition/dp/0201309742/ref=pd_sim_b_1)

22- [http://www.amazon.com/Universal-Serial-System- Architecture-E...](http://www.amazon.com/Universal-Serial-System-Architecture- Edition/dp/0201309750/ref=pd_sim_b_3)

23- [http://www.amazon.com/Introduction-PCI-Express-Hardware- Deve...](http://www.amazon.com/Introduction-PCI-Express-Hardware- Developers/dp/0970284691/ref=pd_sim_b_4)

24- [http://www.amazon.com/Serial-Storage-Architecture- Applicatio...](http://www.amazon.com/Serial-Storage-Architecture-Applications- High-Performance/dp/0971786186/ref=pd_sim_b_2)

25- [http://www.amazon.com/SATA-Storage-Technology-Serial- ATA/dp/...](http://www.amazon.com/SATA-Storage-Technology-Serial- ATA/dp/0977087816/ref=pd_sim_b_1)

26- [http://www.amazon.com/Beyond-BIOS-Developing-Extensible- Inte...](http://www.amazon.com/Beyond-BIOS-Developing-Extensible- Interface/dp/1934053295/ref=pd_sim_b_7)

27- [http://www.amazon.com/Professional-Assembly-Language- Program...](http://www.amazon.com/Professional-Assembly-Language- Programmer/dp/0764579010/)

28- [http://www.amazon.com/Linux-Kernel-Development-3rd- Edition/d...](http://www.amazon.com/Linux-Kernel-Development-3rd- Edition/dp/0672329468/ref=pd_sim_b_6)

29- [http://www.amazon.com/Version-Control-Git-collaborative- deve...](http://www.amazon.com/Version-Control-Git-collaborative- development/dp/1449316387/)

30- [http://www.amazon.com/Embedded-Software-Primer-David- Simon/d...](http://www.amazon.com/Embedded-Software-Primer-David- Simon/dp/020161569X/ref=pd_sim_b_6)

31- [http://www.amazon.com/Programming-Embedded- Systems-C/dp/1565...](http://www.amazon.com/Programming-Embedded- Systems-C/dp/1565923545/ref=pd_sim_b_4)

32- [http://www.amazon.com/Making-Embedded-Systems-Patterns- Softw...](http://www.amazon.com/Making-Embedded-Systems-Patterns- Software/dp/1449302149/ref=pd_sim_b_2)

33- [http://www.amazon.com/Operating-System-Concepts-Abraham- Silb...](http://www.amazon.com/Operating-System-Concepts-Abraham- Silberschatz/dp/1118112733/ref=dp_ob_title_bk)

34- [http://www.amazon.com/Performance-Preemptive-Multitasking- Mi...](http://www.amazon.com/Performance-Preemptive-Multitasking- Microprocessors-Microcontrollers/dp/0982337531/)

35- [http://www.amazon.com/Design-Operating-System-Prentice- Hall-...](http://www.amazon.com/Design-Operating-System-Prentice-Hall- Software/dp/0132017997/)

36- [http://www.amazon.com/Unix-Network-Programming-Sockets- Netwo...](http://www.amazon.com/Unix-Network-Programming-Sockets- Networking/dp/0131411551/)

37- [http://www.amazon.com/TCP-Illustrated-Volume-Addison- Wesley-...](http://www.amazon.com/TCP-Illustrated-Volume-Addison-Wesley- Professional/dp/0321336313/ref=pd_sim_b_2)

38- [http://www.amazon.com/TCP-IP-Illustrated-Vol- Implementation/...](http://www.amazon.com/TCP-IP-Illustrated-Vol- Implementation/dp/020163354X/ref=pd_sim_b_5)

39- [http://www.amazon.com/TCP-Illustrated-Vol-Transactions- Proto...](http://www.amazon.com/TCP-Illustrated-Vol-Transactions- Protocols/dp/0201634953/ref=pd_sim_b_5)

40- [http://www.amazon.com/User-Interface-Design-Programmers- Spol...](http://www.amazon.com/User-Interface-Design-Programmers- Spolsky/dp/1893115941/)

41- [http://www.amazon.com/Designing-Interfaces-Jenifer- Tidwell/d...](http://www.amazon.com/Designing-Interfaces-Jenifer- Tidwell/dp/1449379702/)

42- [http://www.amazon.com/Designing-Interfaces-Jenifer- Tidwell/d...](http://www.amazon.com/Designing-Interfaces-Jenifer- Tidwell/dp/1449379702/)

43- [http://www.amazon.com/Programming-POSIX-Threads-David- Butenh...](http://www.amazon.com/Programming-POSIX-Threads-David- Butenhof/dp/0201633922/ref=sr_1_4?s=books&ie=UTF8&qid=1353993641&sr=1-4&keywords=multithreaded+programming)

44- [http://www.intel.com/p/en_US/embedded/hwsw/software/hd- gma#d...](http://www.intel.com/p/en_US/embedded/hwsw/software/hd- gma#documents)

45- [http://www.intel.com/content/www/us/en/processors/architectu...](http://www.intel.com/content/www/us/en/processors/architectures- software-developer-manuals.html)

46- [http://www.intel.com/p/en_US/embedded/hwsw/hardware/core-b75...](http://www.intel.com/p/en_US/embedded/hwsw/hardware/core-b75/hardware)

47- <http://www.hdmi.org/index.aspx>

48- <http://en.wikipedia.org/wiki/Digital_Visual_Interface>

49- [http://www.amazon.com/Essential-Device-Drivers- Sreekrishnan-...](http://www.amazon.com/Essential-Device-Drivers-Sreekrishnan- Venkateswaran/dp/0132396556/)

50- [http://www.amazon.com/Making-Embedded-Systems-Patterns- Softw...](http://www.amazon.com/Making-Embedded-Systems-Patterns- Software/dp/1449302149/)

51- [http://www.amazon.com/Python-Programming-Introduction- Comput...](http://www.amazon.com/Python-Programming-Introduction-Computer- Science/dp/1590282418/)

52- [http://www.amazon.com/Practical-System-Design-Dominic- Giampa...](http://www.amazon.com/Practical-System-Design-Dominic- Giampaolo/dp/1558604979/)

53- [http://www.amazon.com/File-Systems-Structures-Thomas- Harbron...](http://www.amazon.com/File-Systems-Structures-Thomas- Harbron/dp/0133147096/ref=pd_sim_b_3)

54- ...well, I'll stop here.

Of course, the equivalent knowledge can be obtained by trial-and-error, which would take longer and might result in costly errors and imperfect design. The greater danger here is that a sole developer, without the feedback and interaction of even a small group of capable and experienced programmers could simply burn a lot of time repeating the mistakes made by those who have already trenched that territory.

If the goal is to write a small RTOS on a small but nicely-featured microcontroller, then the C books and the uC/OS book might be a good shove in the right direction. Things start getting complicated if you need to write such things as a full USB stack, PCIe subsystem, graphics drivers, etc.

<comment><USER53> > If the goal is to write a small RTOS on a small but nicely-featured > microcontroller, then the C books and the uC/OS book might be a good shove > in the right direction. Things start getting complicated if you need to > write such things as a full USB stack, PCIe subsystem, graphics drivers, > etc.

I've always wondered if there could be created some way to skip this step in [research] OS prototyping, by creating a shared library (exokernel?) of just drivers, while leaving the "design decisions" of the OS (system calls, memory management, scheduling, filesystems, &c.--you know, the things people get into OS development to play with) to the developer.

People already sort of do this by targeting an emulator like VirtualBox to begin with--by doing so, you only (initially) need one driver for each feature you want to add, and the emulator takes care of portability. But this approach can't be scaled up to a hypervisor (Xen) or KVM, because those expect their guest operating systems to also have relevant drivers for (at least some of) the hardware.

I'm wondering at this point if you could, say, fork Linux to strip it down to "just the drivers" to start such a project (possibly even continuing to merge in driver-related commits from upstream) or if this would be a meaningless proposition--how reliant are various drivers of an OS on OS kernel-level daemons that themselves rely on the particular implementation of OS process management, OS IPC, etc.? Could you code for the Linux driver-base without your project growing strongly isomorphic structures such as init, acpid, etc.?

Because, if you could--if the driver-base could just rely on a clean, standardized, exported C API from the rest of the kernel, then perhaps (and this is the starry-eyed dream of mine) we could move "hardware support development" to a separate project from "kernel development", and projects like HURD and Plan9 could "get off the ground" in terms of driver support.

<comment><USER25> A lot depends on the platform. If the OS is for a WinTel motherboard it is one thing. If, however, the idea is to bypass driver development for a wide range of platforms it gets complicated.

In my experience one of the most painful aspects of bringing up an OS on a new platform is exactly this issue of drivers as well as file systems. A little google-ing quickly reveals that these are some of the areas where one might have to spend big bucks in the embedded world in order to license such modules as FFS (Flash File System) with wear leveling and other features as well as USB and networking stacks. Rolling your own as a solo developer or even a small team could very well fit into the definition of insanity. I have done a good chunk of a special purpose high-performance FFS. It was an all-absorbing project for months and, realistically, in the end, it did not match all of the capabilities of what could be had commercially.

This is where it is easy to justify moving into a more advanced platform in order to be able to leverage Embedded Linux. Here you get to benefit and leverage the work of tens of thousands of developers devoted to scratching very specific itches.

The down-side, of course, is that if what you need isn't implemented in the boad support package for the processor you happen to be working with, well, you are screwed. The idea that you can just write it yourself because it's Linux is only applicable if you or your team are well-versed in Linux dev at a low enough level. If that is not the case you are back to square one. If you have to go that route you have to hire an additional developer that knows this stuff inside out. That could mean $100K per year. So now your are, once again, back at square one: hiring a dev might actually be more exoensive than licensing a commercial OS with support, drivers, etc.

I was faced with exactly that conundrum a few years ago. We ended-up going with Windows CE (as ugly as that may sound). There are many reasons for that but the most compelling one may have been that we could identify an OEM board with the right I/O, features, form factor, price and full support for all of the drivers and subsystems we needed. In other words, we could focus on developing the actual product rather than having to dig deeper and deeper into low-level issues.

It'd be great if low level drivers could be universal and platform independent to the degree that they could be used as you suggest. Obviously VM-based platforms like Java can offer something like that so long as someone has done the low-level work for you. All that means is that you don't have to deal with the drivers.

To go a little further, part of the problem is that no standard interface exists to talk to chips. In other words, configuring and running a DVI transmitter, a serial port and a Bluetooth I/F are vastly different even when you might be doing some of the same things. Setting up data rates, clocks, etc. can be day and night from chip to chip.

I haven't really given it much thought. My knee-jerk reaction is that it would be very hard to crate a unified, discoverable, platform-independent mechanism to program chips. The closest one could possibly approach this idea would be if chip makers were expected to provide drivers written to a common interface. Well, not likely or practical.

Not an easy problem.

<comment><USER53> > It'd be great if low level drivers could be universal and platform > independent to the degree that they could be used as you suggest. Obviously > VM-based platforms like Java can offer something like that so long as > someone has done the low-level work for you. All that means is that you > don't have to deal with the drivers.

Another thought: if not just a package of drivers, then how stripped down (for the purpose of raw efficiency) could you make an operating system intended only to run an emulator (IA32, JVM, BEAM, whatever) for "your" operating system? Presumably you could strip away scheduling, memory security, etc. since the application VM could be handling those if it wanted to. Is there already a major project to do this for Linux?

</comment></comment></comment></comment><comment><USER54> Good luck, I certainly hope you don't end up like losethos.

</comment><comment><USER55> > No Unix directory tree. I hate it – it does not say anything to a user

Actually it has a lot to say, but in this case it just appealed to the fifth amendment.

<comment><USER56> This is one of those times that the phrase "RTFM" actually makes sense. If the author had read what each one was rather than guessing, he'd have enjoyed it all a lot more. Nobody likes typing out "/system/configurations/networking". That's why they wound up with things like "/sys/conf/net". But hey, if he succeeds, maybe he'll come around.

<comment><USER57> Do you have any reason to assume he won't implement tab completion? Sure doesn't take long to write out /System/Library/[..] on os x

</comment></comment></comment><comment><USER58> Good luck, have fun.

</comment><comment><USER59> Won't be big and professional like gnu.

Seriously though, good luck.

</comment><comment><USER60> This guy is slightly clueless but he has the spirit. I've written my own hobby operating system skeleton and it was a very good learning experience.

Here's a few notes about his plans:

      > Target modern architecture
      > Avoid legacy, drop it as fast as you can. You can even skip the Protected mode and jump directly to Long mode

I went on and wrote my hobby OS on x86_64 too. Unfortunately, working in x86_64 long mode is a little bit more difficult than using 32 bit protected mode. You can go direct to long mode, but you'll have to write that from scratch. GRUB and other multiboot protocol capable bootloaders set up 32-bit protected mode for you but not long mode. You cannot be in long mode without paging enabled (unlike in protected mode).

So if you want to "skip" protected mode, you'll have to write a pile of assembly code to get there. x86_64 is a lot more work than 32bit x86.

      > Jump to C as soon as possible

This is most definitely the right thing to do. Jump into C code as soon as possible. Getting shit done in Assembly is so much slower.

You only need a few pieces of assembly code to get an operating system running: the boot code and the interrupt handler code. The boot code and the interrupt handler are just small trampolines that go to C code as soon as possible.

In addition to the boot and interrupt handler code, you occasionally need to use some privileged mode CPU instructions (disable interrupts or change page table, etc). Use inline assembler for that.

Anyone who (in this thread) suggested using something else than C seemed to be fairly clueless about it. Of the choices you have available, C is the simplest way to go. Everything else is either more work or more difficult.

      > Forget old interfaces like PCI, IDE, PS/2, Serial/Parallel ports.

Not so fast. You most likely want to implement a serial console for your operating system. Maybe even add a serial port debugging interface (GDB stubs).

You're most likely going to have to deal with PCI bus at some point too, although many devices don't use the physical pci buses on motherboards, some devices still hook up to the pci bus. Look at the output of "lspci" on Linux, all of those devices are accessed through PCI. This includes USB, PCIe, SATA, IDE, Network interfaces, etc.

Again, using the modern buses is a lot more work than using the old ones and it partially builds upon the old things.

      > Why does every tutorial still use such an ancient device as Floppy?

Because when doing a bootloader from scratch for a tutorial, it's a lot easier to use the floppy disk than it is to use a real hard disk or any other media.

      > Avoid the use of GRUB or any other multiboot bootloader – make my own and allow only my own OS on the system

No no no. If you want to build an operating system, do not build a bootloader. Use the multiboot protocol and things will be a lot easier. You'll get started so much faster and get to the real stuff sooner. (NOTE: I don't know how UEFI devices boot, it might contain something like multiboot).

Most hobby operating systems are just half-assed stage 1 bootloaders. Just get over the fact that you'll have to use code written by others and get booted.

Popular emulators (bochs, qemu) can boot multiboot kernels directly so you'll save a lot of time there too.

You need to get booted in an emulator and running under a debugger as quickly as possible. Operating system development is so much easier to do with a debugger at hand. Failures generally cause a boot loop or hang the device so there won't be a lot of diagnostics to help with issues.

So my advice is: set up Qemu + GDB + multiboot, and get your kernel booted in a debugger as early as you can.

I won't go into commenting his wacky ideas about VFS structure or APIs. It's nice to make great plans up front but by the time you're booted to your own kernel, a lot of the naïve ideas you started with will be "corrected".

Happy hacking and do not listen to the naysayers.

PS. here's my hobby OS: <http://github.com/rikusalminen/danjeros>

</comment><comment><USER61> OS development can be fun. I'm writing a hobby OS myself, but currently using GRUB. GDT and interrupts are working, so I can already e.g. get keyboard input. But there's nothing like usermode programs yet. I'm 16, so what bcantrill said might be true ("there is a certain arrogance of youth here").

</comment><comment><USER62> I would avoid the project unless you truly understand the scope of what you're doing and are dying to get your hands dirty with vm and filesys implementation despite little reward (other than the satisfaction of learning). OS dev is quite low level and infamously hard to debug

</comment><comment><USER63> Good luck and thumbs up for the idea of writing a new OS. I think an inspiration would be to look at BareMetal OS, perhaps you can find some ideas there.

<http://www.returninfinity.com/baremetal.html>

</comment><comment><USER64> Sigh. I don't know what to say. I admire OP's desire to dive into OS development but I hope he has the perseverance to carry it through, because he has a long way to fill in the huge gaps in his knowledge to build an OS.

</comment><comment><USER65> I like the idea of the directory tree, good luck! I have been interested in OS Development lately, I have read some of the James tutorial, the OsDev Wiki, and the Tanenbaum's book... but still have no idea what I'm doing.

</comment><comment><USER62> I would look at the Design of Unix. That's what Linus used to make Linux. Individually study everything you don't understand...

Also, prepare for about 6 months of hard yet rewarding, given that you put in about 50 hours a week ;)

</comment><comment><USER66> Today's modern interfaces are tomorrow's obsolete ones. It's not like PCIe will last any longer than PCI, PCI-X, ISA, Vesa Local Bus, EISA, etc.

<comment><USER46> I don't see why we aren't nearing a threshold where we can do all system interconnects over some specificed serial digital interface and a parallel one. Past a point, it becomes more logical than trying to optimize edge case performants of things (like how dvi is uni-directional raw video digraphs) you can just have some usb-like (but not usb, usb is ugly and tacky and a mess) digital connector for every peripheral from the monitor to the network adapter to the speakers, maybe even off one controller with software handling the handshakes to determine what everything is connected to.

And then get rid of sata/pci/sas etc internal connectors and just use the same interconnect hub as the external devices. Again, handshakes to determine device connectivity.

Wouldn't that be so _easy_? One connection to rule them all! I'm not trying to say it would be easy to get to, we are mired in a world where we look at a concept like this and say "how dumb, you aren't utilizing a bidirectional link with video feeds, or you aren't using the power connectivity to a network router, or stream based vs packet based trasport layers having speed / bandwidth advantages over one or the other. But wouldn't it be great to plug a new gpu into a real universal serial bus?

</comment></comment><comment><USER67> I remember a guy saying the same a few years ago ... what's his name? Linus?

</comment><comment><USER68> This is cool. Big project for one person, but cool none the less

</comment><comment><USER69> Write your own OS: great!

Say you're writing your own OS: ok, sure...

</comment><comment><USER70> Good lord ...

</comment><comment><USER71> Read books, Guncha! Good luck. If Stallman did that, so can you.

</comment><comment><USER72> [deleted] ChuckMcM is right, let him find out what he doesn't know. Props for the ambition.

</comment><comment><USER73> 3rd Year ECE + Hope . How did this make HN?

</comment><comment><USER74> *Houston

<comment><USER75> *whether

<comment><USER76> *useful</comment></comment></comment>


Yahoo ends support of "Do Not Track" - <AUTHOR> http://yahoopolicy.tumblr.com/post/84363620568/yahoos-default-a-personalized-experience/

<comment><USER2> Do Not Track has been effectively dead for 1.5 years. Very few advertising companies ever supported it due to Microsoft's decision to buck the spec and enable it by default for all IE10 users (a transparent attack on Google by a company whose own advertising business had just imploded in a $4B write-off).

The original agreement was carefully hashed out between advertisers and browser vendors with the understanding that only a small percentage of users would be opting out. When Microsoft reneged on that, the advertising industry backed out.

Whatever you think about online tracking, the voluntary nature of DNT and the complete lack of enforceability (there's no way, as a user, to determine whether a company is following DNT) made it pretty useless. True privacy protection needs to be on the client side (like script blocking or 3rd party cookie blocking), not on the server side.

<comment><USER3> > due to Microsoft's decision to buck the spec and enable it by default for > all IE10 users

Did you ever install IE10? The screen gave users the option to configure everything but selected the most likely settings for many things, not just DNT: [http://img.wonderhowto.com/img/21/42/63487287284459/0/yahoo-...](http://img.wonderhowto.com/img/21/42/63487287284459/0/yahoo- ignores-ie10s-do-not-track-option-windows-8-stop-them-with-these-add- ons.w654.jpg)

What level of "not by default" would have been acceptable to advertisers? I suspect they would be happy only if the option was disabled by default and hidden from view. An uninformed consumer is a trackable consumer.

<comment><USER2> I have. You have to click through to a separate screen to get the option to disable it. If you try that, it will warn you on the next screen that you are not using the recommended settings. Then variously using IE10 you will get prompted to use the recommended settings. Microsoft makes it pretty hard for an average person to disable it.

DNT was a voluntary standard, and the advertisers refused to buy in unless it was off by default (the vast majority of people will not change defaults, even if you make it easy for them). Microsoft violated that agreement to hurt Google, and as a result DNT is dead.

<comment><USER4> so, DNT can be recommended to you and your close ones, but not the general public? that is some entitlement you have going on there.

i applaud microsoft for protecting their customers, instead of selling them out like google does with android.

also, most big advertisers chose to ignore DNT only for IE. so no, it has not been dead for that long.

<comment><USER5> The whole point of DNT is that it is a voluntary measure by advertisers to avoid tracking people who don't want to be tracked.

Given that turning DNT on by default would essentially turn DNT on for everybody, supporting DNT in that scenario would have imploded the whole business model of the same advertisers.

Obviously they're not going to voluntarily decide to go out of business, so the advertisers then dropped support for DNT entirely.

Now _no one_ gets the benefit of DNT, not even the privacy-conscious minority who actually cared about it.

Welcome to second and third-order effects...

<comment><USER4> we already beat that horse to death. it is not enable by default. it is SHOWN to the user to chose. and the checkbox is enabled by default, because, let's agree on this, microsoft did their homework and that is the best choice to recomend to their users.

it is never enabled against the user knowledge. it is just the correct default when it is presented to them.

and again, by no-one, you mean YOU. you are pissed off that everyone is not disabled on DNT and not even shown the option, and only you and other tech savvy people can benefit.

</comment></comment></comment></comment></comment></comment><comment><USER6> Do not track, as defined, was pretty meaningless. See the section of the RFC listing the exceptions:

        9.3.  Exceptions

        As a general guideline, exceptions to Do Not Track are warranted when
        commercial interests substantially outweigh privacy and verification
        interests.  The following activities are excepted:

        1.  Tracking of users who have explicitly consented to tracking, such
            as by enabling a checkbox in a preferences menu on the first-
            party website of the tracking service.
        2.  Data obtained by a third party exclusively on behalf of and for
            the use of a first party.
        3.  Data that is, with high confidence, not linkable to a specific
            user or user agent.  This exception includes statistical
            aggregates of protocol logs, such as pageview statistics, so long
            as the aggregator takes reasonable steps to ensure the data does
            not reveal information about individual users, user agents,
            devices, or log records.  It also includes highly non-unique data
            stored in the user agent, such as cookies used for advertising
            frequency capping or sequencing.  This exception does not include
            anonymized data, which recent work has shown to be often re-
            identifiable (see [Narayanan09] and [Narayanan08]).
        4.  Protocol logs, not aggregated across first parties, and subject
            to a two week retention period.
        5.  Protocol logs used solely for advertising fraud detection, and
            subject to a one month retention period.
        6.  Protocol logs used solely for security purposes such as intrusion
            detection and forensics, and subject to a six month retention
            period.
        7.  Protocol logs used solely for financial fraud detection, and
            subject to a six month retention period.

        To ensure data allowed for only specific uses is adequately
        protected, functional entities SHOULD implement strong internal
        controls.

Basically every advertising network would fall under 2 or 3.

<comment><USER7> Awesome, this is exactly what I was too lazy to Google and dig up on my own. The plan pretty much shoots itself in the foot before it even leaves the gates.

<comment><USER4> ironically, yahoo is the ONLY big publisher adopting safeFrames. which effectively blocks any ability of the ad to identify the user, or set cookies as a fake-first-party.

<comment><USER8> It is not really ironic. Yahoo! is the only/first one being honest about DNT to date (that I am aware of). Yahoo! is just bowing out of a deeply flawed spec.

<comment><USER4> exactly why it is ironic!

they are the only one solving the privacy-while-showing-ads issue by using safeframes. then they drop DNT because it is a fallacy for the most part.

but they write that announcement in the worst possible way and everyone goes crazy.

<comment><USER8> I misinterpreted your comment then! Thanks for the clarification.

</comment></comment></comment></comment></comment></comment><comment><USER9> "The privacy of our users is a top priority for us," Yahoo says as they end support for users' privacy settings.

<comment><USER10> This. The comments on the post are priceless too.

</comment></comment><comment><USER11> I used to feel that blocking online ads was freeloading, but I am increasingly convinced that the online ads are a failed experiment and it's our duty to kill them -- especially when the industry can't even follow through on watered-down self-regulation like DNT.

The crazy thing is that major websites like Yahoo don't even know what ads they are serving. And increasingly online ads are an attack vector for viruses and malware. In January Yahoo was serving malware via their online ads.[1] And in February Google did the same.[2]

And of course there are the major privacy issues with companies tracking us online. I understand that online publishing is important and we clearly need a strong press, but publishing really needs to find a new business model. Online ads are not the solution.

[1]: [http://www.cnn.com/2014/01/05/tech/yahoo-malware- attack/inde...](http://www.cnn.com/2014/01/05/tech/yahoo-malware- attack/inde..).

[2]: [http://labs.bromium.com/2014/02/21/the-wild-wild-web- youtube...](http://labs.bromium.com/2014/02/21/the-wild-wild-web-youtube..).

<comment><USER12> Sure, kill them. I mean, as long as you realize that killing off online ads essentially means opting in to a future where quality content is forced behind a paywall as a matter of course.

And I say this as someone who loathes advertising and the creepy mentality behind them. They're kind of necessary evil. Keeping a tighter rein on what kinds of ads can be served would help tremendously. They need to eradicate that stigma of them being a dangerous vector. Erf.

<comment><USER13> Then we can invent in a proper paywall, something that works unintrusively. And then users are the customers again, and we can get our internet back.

</comment></comment></comment><comment><USER14> The important thing to note here is not that Yahoo! is so evil. It is that they are probably one of the few companies in the world that are honest about it. And surely after this outcry, or at least 3/5 comments here are talking about needing warnings on "websites like these" or "now I have a reason to block Yahoo's cookies", surely no other companies will publicly announce the end of DNT support.

And besides, Do Not Track is a black box: they can do whatever the hell they like while our browser merely requests "Would you please not track me even if your site is entirely free and ad-supported?" Because it's not like they're keeping databases on us purely for fun.

<comment><USER4> meanwhile, other big publishers: what the hell is DNT?

</comment></comment><comment><USER15> The privacy of our users is and will continue to be a top priority for us. Just not as long as it in any way might affect our current revenue streams.

<comment><USER16> Marissa Mayer is getting a little weird in the quest to show she has brought some value to Yahoo.

She runs a company that cares about you and want the "best user experience", so long as it doesn't hurt the bottom line at all. And the next rounds of layoffs are probably not too far away, from everything I've heard.

<comment><USER4> she learned at google that this matters little. just see android announcing to you carrier that you use tethering, or the fact that google employers actively REMOVE features from chromium that impact adsense revenue such as disabling referrer, etc.

<comment><USER17> Chrome's options for DNT are hilarious. For every other option, like spelling, they give you an order of (Yes, No) when you check the box to enable the option. For spelling correction, they encourage you to enable it with the phrasing.

For DNT, they have a lengthy explanation of how tracking is still done and totally helps your experience. Then the _reverse the order_ of the buttons so the default is to cancel out of the operation.

Seems unlikely this was implemented as an accident.

</comment></comment></comment></comment><comment><USER18> Microsoft effectively destroyed "Do Not Track" by making it the default in their browser, and therefore destroying any notion of "intent" by the user. The day Microsoft made it the default was the day I immediately knew that the Yahoo/Google's of the world would stop supporting it in the future. Clever move by Microsoft in the embrace/extend/extinguish cycle.

<comment><USER19> Why does one choice of default "destroy intent," while the other doesn't? Why do you assume the default setting of allowing tracking is the correct one?

<comment><USER20> More importantly, why is "on by default" supposed to be "bad" when the entire system is designed to protect people's privacy?

Microsoft don't sound like the problem.

<comment><USER13> DNT is not designed to protect everyone's privacy, it was meant a way to grow a clear sign that people don't want to be tracked. If browsers really wanted to protect people's privacy, they'd block 3rd party cookies by default and show 1st party cookies as a warning.

<comment><USER20> All good points.

</comment></comment></comment></comment></comment><comment><USER21> FYI, if you don't want Yahoo ads to track you, they offer an opt-out. [https://info.yahoo.com/privacy/asia/yahoo/opt_out/targeting/...](https://info.yahoo.com/privacy/asia/yahoo/opt_out/targeting/details.html)

You can opt-out of pretty much all the major ad networks at once, in fact: [http://www.networkadvertising.org/choices/?partnerId=1](http://www.networkadvertising.org/choices/?partnerId=1)

It's been like that for years. I'd submit that as evidence that the ad industry is willing and able to accommodate people who don't want to be tracked on an opt-out basis.

<comment><USER22> You have to keep that cookie on all your devices for all ad companies? no thanks, I would rather block all ads.

<comment><USER21> Well, DNT was supposed to be the alternative.

You can inspect the cookie. Yahoo's is literally "optout=1"

</comment></comment></comment><comment><USER23> Yahoo ends support of "Do Not Track". Fast Lanes for sale. Facebook is using my data for advertising outside it's walled garden... sigh. Give me back my old 56k modem. I miss my old internet.

</comment><comment><USER24> The title doesn't even make sense. The default was _always_ to track users. Yahoo could have made this sound a lot less disingenuous if they had spun ending Do Not Track support as "this 'standard' is weak, hard for users to understand, and not guaranteed to be implemented by anyone, giving the average browser user a false sense of security."

This post just makes it seem like one of the higher-ups realized that Yahoo's missing out on a chunk of data that everyone else gets and decided to go for a "quick win".

</comment><comment><USER25> Browsers should have some sort of warning message when visiting sites like these.

<comment><USER14> You mean like the European cookie law? Yeah that worked out great.

<comment><USER26> Implementing that must have been fun. "You mean you got it watered down so much that all we have to do to continue as usual is make our users hate government even more? lol"

</comment></comment></comment><comment><USER27> I never had a reason to ban all Yahoo! cookies on my browsers, until today.

<comment><USER14> The fact that they supported it at all was relatively exceptional. You'd better block cookies on all other domains before they, _gasp_ , place more tracking cookies!

</comment></comment><comment><USER28> Did DNT ever have any support beyond verbal promises? I personally feel that it was always useless and never really trusted anyone saying they "honoured" it.

</comment><comment><USER7> But has there ever been a precise specification of what it means to "track" a user? Does "track" have any finite meaning, or is it just an open-ended plea from the user for everyone to pretend that certain events never happened?

To speak of "tracking" one might mean:

      A. Thou shalt not cookie a user.

      B. Thou shalt not record plain text log files on a
         server-side file system, regarding the nature of these
         requests. Thou shalt not persist discrete information
         to a relational database, with respect to these
         particular HTTP requests.

      C. Thou shalt not inspect which IP address HTTP POST
         requests originate from, and treat them differently, if
         a user proclaims "no tracksies". GET requests will be
         treated as read-only requests for static resources. If
         the static resources change, I wish to play no part in
         such events.

      D. Thou shalt neither inspect ANY HTTP requests (PUT,
         DELETE, POST or GET), nor serve individualized
         resources, regardless of any particular attributes
         present in the request. Thou shalt only keep the
         specific data I tell you to keep, and destroy
         everything else related to my requests. At a later
         point in time, I reserve the right to become
         irrationally angry about your having kept the *some* of
         the data I told you to keep, because, technically
         speaking, the DO-NOT-TRACK header is all encompassing,
         and supercedes all other instructions. I also reserve
         the right to get angry if *your* system does not
         perform according to *my* expectations, whatever those
         expectations may be, at any particular time.

      E. Thou shalt not provide me with any uniquely
         identifiable information. I do not wish to receive
         information which has not already been provided to
         anyone else. Please do not transmit unique information
         to me over the wire or over the air. Doing so will
         change the state of my system in a unique way, which
         I'll eventually have to answer to. If I receive non-
         standard resources and information from you, my service
         provider and local authorities, may use this against
         me, and derive other information from these details. I
         may be penalized for knowing or having things other
         people do not.

      F. This never happened. I don't exist. You don't exist. We
         don't know each other. There was never any /index.html
         or /default.htm available here. I never asked for it,
         and if anyone did ask for it, you just said "404". You
         don't know how many people were looking for that file,
         or whether it was 5KB or 17MB at any particular time.

One can easily understand how a user might urgently want for one or all of those, or even more stringent restrictions to be adhered to, under certain circumstances, but in some cases, the very nature of the beast is for a given server or cluster to maintain a certain degree of situational awareness, regarding the current state of user activity requested.

Beyond even that, in most cases, for a user to simply request the common courtesy of being forgotten might be unrealistic and completely ineffective from the outset.

       "Please don't track me, but here's my ID and password, now log me into my account."

I can think of several ways to interpret that. Worse yet, the fact that a user may have cookies turned on, and has sent the request in plain text, across ten other systems beyond my own control (all of which should also respect the user's wishes) completely defeats any realistic expectations of non- disclosure.

An honor system is certainly an admirable aspiration, but sending "do not track" requests by default also creates a general atmosphere of noise from users who may or may not be cognizant of the true nature of their actions.

The knee-jerk idea that cookies are bad isn't good enough. The idea that you can simply ask people to "be nice" also isn't good enough.

Dumb people are always going to be their own worst enemies, by playing the role of low hanging fruit to be preyed upon.

I've always felt that "do-not-track" requests were bullshit, just like the European cookie law was a silly white wash. (servers remember data, it's what they do. businesses exploit their customers for a profit, it's what they do.)

Just like having to opt into a "do-not-call" registry is bullshit. (no one wants to be cold-called by telemarketers, so why is this an opt-in thing?)

Just like anti-virus software is bullshit. (hey, how about you just don't execute code indiscriminately? doesn't that work too?)

The list goes on...

</comment><comment><USER29> Wait...people still use Yahoo? :)

<comment><USER21> Second only to Google in terms of desktop web traffic, if you believe Comscore: [https://www.comscore.com/Insights/Press_Releases/2014/3/comS...](https://www.comscore.com/Insights/Press_Releases/2014/3/comScore_Media_Metrix_Ranks_Top_50_US_Desktop_Web_Properties_for_February_2014)

Roughly the size of Facebook and LinkedIn combined.

<comment><USER29> Yeh but thats misleading as worldwide it's about 5% of total.

[http://searchengineland.com/google-worlds-most-popular- searc...](http://searchengineland.com/google-worlds-most-popular-search- engine-148089)</comment></comment></comment>


Physics: possible fifth force of nature - <AUTHOR> http://phys.org/news/2016-08-physicists-discovery-nature.html <comment><USER2> Searching for more information, I came across this two-months-older article:

> The Atomki group has produced three previous papers on their beryllium-8 > experiments — conference proceedings in 2008, 2012 and 2015.

> The first paper claimed evidence of a new boson of mass 12 MeV, and the > second described an anomaly corresponding to a 13.45-MeV boson. (The third > was a preliminary version of the Physical Review Letters paper.)

> The first two bumps have disappeared in the latest data, collected with an > improved experimental setup. "The new claim now is [a] boson with a mass of > 16.7 MeV," Naviliat-Cuncic said. "But they don't say anything about what > went wrong in their previous claims and why we should not take those claims > seriously." One naturally wonders, he said, "Is this value that they quote > now going to change in the next four years?"

[0] [https://www.quantamagazine.org/20160607-new-boson-claim- face...](https://www.quantamagazine.org/20160607-new-boson-claim-faces- scrutiny/)</comment>


Ask HN: what are some amazing HTML5 Stuff you sites you came across? - <AUTHOR>

<comment><USER2> Perhaps [http://html5doctor.com](http://html5doctor.com)?

</comment><comment><USER3> codrops is one of my favourites: [http://tympanus.net/codrops/](http://tympanus.net/codrops/)</comment>


New Oracle Cloud always free tier - <AUTHOR> https://www.oracle.com/cloud/free/ <comment><AUTHOR> I was all excited untill I read the "*" footnote.

>>>The capacity limits listed under each service are only estimates and reflect the maximum capacity you can get if you consume your entire credits on one service during the promotional period.<<<

Now I am not sure, how can "always" and "promotional peried" be put in same context.</comment>


Bye-Bye from Flash CS5 app, Alchemist, in AppStore (See under Description) - <AUTHOR> http://itunes.apple.com/us/app/alchemist/id348009084?mt=8#

<comment><USER2> > Please support us by purchasing Alchemist for the special "bye bye" price!

It's $18.99?! How much was it before?

</comment><comment><USER3> If a few high-profile exists like this happen, Apple could be forced into the position of backtracking or steam-rolling ahead. Neither are good for the company.

<comment><USER4> I'm not sure this is true. Unfortunately, I highly doubt there will be any backtracking. Especially with the email quotes from Jobs that have popped up in various weblogs.

And steam-rolling ahead, they'll lose a hundred (a couple hundred) apps from the App Store. Compared to the 150,000+ apps available, I don't see how they would perceive it as a big deal to lose so few.

<comment><USER3> It's not about the number of apps lost, but about the message that "Apple is not good to the people who make my app and they're leaving" getting out. It takes a few high-profile bad reports like this for a negative impression to form and that's hard to reverse.

</comment></comment></comment><comment><USER5> shameless promotion much? wish I could mod this story down.

<comment><AUTHOR> paranoid much? I have nothing to do with that app. I just saw that posted somewhere and thought it was interesting.</comment></comment>


Most unhappy people are unhappy for the exact same reason - <AUTHOR> https://qz.com/1190151/why-am-i-unhappy-a-new-study-explains-americas-unhappiness-epidemic/ <comment><USER2> the thing is many of these non screen activities cost money, if you already have a computer theres a wealth of entertainment available to you, it may not be a perfect substitute for other activities or real human interaction but they didnt seem to consider the state of the lives of the teens they studied

were the ones who spent more time on screens from poorer backgrounds? was the increase simply due to the fact that the cost of accessing the internet or owning a smartphone is now cheaper affording access to the poorer who were in fact already unhappy (just because their screen activities have helped them fill time doesnt mean its made them happy)</comment>


Alzheimer's Protein Found in Young Brains for the First Time - <AUTHOR> http://time.com/3727071/alzheimers-young-brains/

<comment><USER2> Actual paper: [http://brain.oxfordjournals.org/content/early/2015/02/26/bra...](http://brain.oxfordjournals.org/content/early/2015/02/26/brain.awv024)

</comment><comment><USER3> I would be interested to know if the existence of these plaques ends up being diet-related, as dementia is often called "type 3 diabetes."</comment>


How to Cut Cake Fairly and Finally Eat It Too - <AUTHOR> https://www.quantamagazine.org/20161006-new-algorithm-solves-cake-cutting-problem/ <comment><USER2> Sometimes it makes me sad to read something like this and see it be so readily dismissed from the real world because of complexity. It makes me wonder how much precision matters in practice vs principle.

> Even a simpler such algorithm would be unlikely to have practical > implications, Brams cautioned, since the cake portions that players receive > would typically include many tiny crumbs from different parts of the cake — > not a feasible approach if you're dividing something like a tract of land.</comment>


Accounting software for small startups - <AUTHOR> http://renooble.tumblr.com/post/77962234942/accounting-for-small-startups

<comment><USER2> Please don't squeeze pennies here. Your time is astonishingly valuable. Don't squander it by doing it yourself.

I am a tax lawyer and have taken multiple accounting courses. I am not competent.

Software does not solve financial accounting (yet).

Do not hire yourself at $0 per hour. Use Quickbooks for Windows (not the online piece of crap or the Mac piece of crap). Pay a shit ton for a really good bookkeeper. Don't cheap out. Do weekly sit down reviews of your money with the bookkeeper. Fucking mandatory. Or you will financially die.

Personal experience speaking here.

Software will not fix your problem. It won't hit all of the points on your list. Use a human as glue for lots of little pieces that work well. The bonus of using a good human brain -- you don't lie to yourself and believe your own bullshit. You have another person telling you truth.

For receipts use any iPhone app that tracks expenses and lets you take pictures of the receipts. I use XpenseTrkr. It is adequate.

You're an entrepreneur. You're a CEO. Don't DIY. The moment you DIY you aren't an entrepreneur anymore. Get Seth Godin Startup School podcast on iTunes.</comment>


Tapbots and the State of Our Apps in iOS7 - <AUTHOR> http://tapbots.com/blog/business/tapbots-and-the-state-of-our-apps-in-ios7

<comment><USER2> It would be interesting to know if this will entail re-buying Tweetbot for iPhone (and, eventually Tweetbot for iPad).

The focus on how much time it took to do a total rewrite is usually a setup for that type of news, but on the other hand, Tweetbot 2 for iPhone was a free upgrade[1].

[1]: [http://tapbots.com/blog/tweetbot/tweetbot-2-0-for- iphone](http://tapbots.com/blog/tweetbot/tweetbot-2-0-for-iphone)

</comment><comment><USER3> I'm excited. Tweetbot is one of my favorite apps (in fact it's got a prized seat on my dock). I still use it with iOS 7 because I'm used to it. There are tons of other Twitter clients that feel more "iOS 7"-ish, but Tweetbot just has a level of usability that I love. Plus, the synced browsing with the Mac app is really wonderful.

Keep doing awesome work guys. Looking forward to the release (paid or not).</comment>


Show HN: 1MB – Your code editor. In the cloud - <AUTHOR> https://1MB.co <comment><AUTHOR> Just launched 1MB v3 <3 Hope you love it!

</comment><comment><USER2> screenshots/demo would go a long way

<comment><AUTHOR> What else would you like to see? I put screenshots on homepage but I want to make sure homepage is as explanatory as possible.

<comment><USER3> Keeping the front page simple, direct, mobile-friendly, and fast loading generally, is definitely a good idea, but more information would be useful just not cluttering up that clean page.

Perhaps a links along the lines of "I want to know more" or "see a demo" which links to a page (or pages) with a video or gif walkthrough or two.

Especially if your audience is the lesser experienced, which I assume it is as most other people either already have a hosting solution and/or would want a self-hosting option for later, as those users will want reassurance that the process does not have hidden complexities.</comment></comment></comment>