103 karma · joined April 27, 2015
Most of the changes I know of that they've done (UFS support, ELF executables, standard C without the Plan 9 extensions, a different build system, etc..) are more in the details than the architecture.
This seems to be a case of them getting angry at people for having listened to them. If you tell people that the reason to go to university is to find a higher paying job, it's not their fault if they don't value your university once they find a higher paying job.
My point was just the memory allocation and paging isn't significantly different than it would be writing an OS in any other language, it's once you get to the part where you need to implement other people's interfaces/standards to make a viable product that it starts bogging down (if you go that route. If you go your route, then you have two major projects instead of one: writing an OS, and adding a new OS target to an existing toolchain.)
Go uses the Plan9 assembly syntax but doesn't support GNU asm syntax. gccgo uses GNU asm syntax but doesn't support Plan9 assembly.
The Go linker doesn't allow you to not link in the Go standard library runtime, which means you need to use gccgo to write a kernel.
The end result is that you can't do something that's buildable with the standard Go toolchain, and even if Go were to add a "don't link the runtime" option there'd be no way to incrementally port your ASM over one bit at a time. It's all or nothing.
The hard part is once you get memory and paging working, you'll need a syscall interface. If you want to be able to run Go userspace programs, that means you need to implement the syscall interfaces for an OS that's already supported, and can't just go out and design your own, and at that part it starts getting a lot less fun.
It makes me so unreasonably happy to see that added to the terms of GitHub..
In the last screenshot, what's the header at the top of the screen? Is that from the WM or the program running inside of it just drawing at the top of the screen? (It's too low resolution to tell..)
And is stumpwm autotiled or manually tiled?
(If the former, you could just update the code to use the standard Go JSON/etc packages..)
It's "open", but it would almost certainly collapse entirely if Google decided to drop support for it. (There's no sign that they'll do that, but it's not a risk you take with a language like C.)
I use mine as a login server (and something to drawterm into when I want to play around with Plan 9 without booting up a VM), which is a great use case for it. I initially wanted to use it for Go development, but:
1. I had to start by writing a git client, which I never finished enough to be useable.
2. plan9/arm is only in Go tip (and will be in 1.7)
The question "Does technical debt that's been already accrued lead to the rejection of new pull requests?" is what I was expecting.
Instead, the question they're asking is "Do pull requests which add technical debt to a project get rejected?" which is.. pretty obvious. That's the whole point of code review.
They go on to analyze the breakdown of what type of defect causes more discussion by doing a simple average across all of the projects they looked at, but given the visualization in Figure 2 I don't know how you can come to any real conclusion other than "it depends on the project."
So my approach is sort of an attempt to simplify things by going back to how an organized person might have tracked their issues in 1970 before project management software or source control, and then adding a couple hooks for SCM. "bug" is just a tool to streamline it without a lot of pushd/cd/popd.
Which means that you can use all of the commands except purge and commit in Mercurial, and then manually commit the issues directory (I think "hg commit $(bug pwd)" should work for commit, but "hg purge" seems to require an extension and not be built into the base install.) I'm not opposed to supporting hg (or anything else) as a first class SCM, except that I don't use it and wouldn't know if things were working as expected.
The main difference is the design. BE keeps a hidden directory where everything is referenced by hash, which means you need to take the time to set up BE and have the client installed to use it. This is based on human readable file and directory names and isn't concerned with title collisions, which means that if you're stuck you can manage your issues with ls and cat (and mkdir, I guess.)
BE is probably more powerful and mature, but this is lighter weight, has no dependencies, and I find easier to use (possibly because I wrote it.)
I've been using it as a lightweight "What do I have left to do on this branch?" tool that fits into my workflow without having to go to an external service (ie. Redmine) or leave the terminal. The fact that it's context sensitive (it just looks for the nearest issues/ directory) means I can just do a "bug list" to get an instant list of outstanding tasks in whatever I happen to be working on whenever I switch branches or get interupted and need to remember where I was.
(I wanted to call it "context-sensitive," which is more accurate, in the title, but HN said the title was too long, so it became "distributed," since anything in git is "distributed".)