
Circuit: A Minimal Distributed Programmatic OS written in Go - jaytaylor
http://gocircuit.github.io/circuit/
======
jff
I'm getting really sick of people calling this kind of thing an Operating
System. If your first step is "Install Linux", it's not an operating system.
It might be a meta-operating system or something like that, but we've had a
pretty standard definition of what constitutes an OS for decades now.

~~~
mavdi
Not an operating system in traditional terms. but it certainly is operating a
system, on a higher level. Plus, life is too short to be offended by what
people call their product.

~~~
calvins
I operate systems myself, but that doesn't make me an operating system.

~~~
agumonkey
Operating system operator then.

------
malgorithms
Some noteworthy background: this was created by Petar Maymounkov, who is also
known for creating the DHT Kademlia.
[http://en.wikipedia.org/wiki/Kademlia](http://en.wikipedia.org/wiki/Kademlia)

------
al2o3cr
From the security page: "A HMAC-based symmetric authentication, followed by an
asymmetric RC4 stream cipher is supported."

RC4 is WEBSCALE!

Well, and insecure.

~~~
lclarkmichalek
Unfortunately, implementing your own crypto seems to be a per-requisite for
working in the container networking space

------
Xeoncross
Would someone give an overview of what this system does? I'm thinking this is
like chef or puppet and not something like docker correct?

~~~
ansible
The README on github provides a little more information:

[https://github.com/gocircuit/circuit](https://github.com/gocircuit/circuit)

I too am having a hard time trying to figure out exactly where circuit fits
vs. other technology.

It wasn't immediately clear to me if circuit launches the apps, or if it can
start new instances if the current ones fail, or if it can grow the cluster if
demand is the current utilization is too high, or what.

How does this help me vs. writing a script in (the shell, some other
orchestration tool, etc)?

How much of the configuration does it handle? Does it replace etcd?

Those are questions I could ideally answer myself by exploring the
documentation links on the main page. Where / how does it store its own state?

Edit: There is a comparison with Consul on the wiki:

[https://github.com/gocircuit/circuit/wiki/Circuit-
vs.-Consul](https://github.com/gocircuit/circuit/wiki/Circuit-vs.-Consul)

------
saintfiends
I was very excited when I read the headline. I thought someone wrote an OS
kernel in Go. Which is something I would like to see.

~~~
afshin
That's an interesting idea, but because Go is garbage collected, it doesn't
seem like a language that could be used to write an effective kernel, but I'm
out of my depth, so I could be entirely incorrect. Here is the language
authors' current thinking on where they want to go with GC:

[https://docs.google.com/document/d/16Y4IsnNRCN43Mx0NZc5YXZLo...](https://docs.google.com/document/d/16Y4IsnNRCN43Mx0NZc5YXZLovrHvvLhK_h0KN8woTO4/edit)

It seems like a language like Rust with safe memory management and no GC
pauses is better suited to writing a kernel. I know the two languages aren't
really competing in the same space or for writing the same types of systems,
but they are both gaining momentum at about the same time, so the comparison
is a little inevitable.

~~~
saintfiends
I had this bookmarked
[https://code.google.com/p/gofy](https://code.google.com/p/gofy). But it's pre
Go 1.0. I wish someone would port this to recent a version.

------
haosdent
I really confuse this: "Once a circuit cluster is formed, the circuit system
itself cannot fail—only individual hosts can. In contrast, comparable systems
(like CoreOS, Consul and Mesosphere) can fail if the hardware hosting the
system's own software fails."

When I read the document, start a process in circuit is equal to start a
process on a individual host. So how circuit make sure this process which run
on a individual host could not fail?

But if the fail mean the whole circuit cluster could not fail, as I now,
CoreOS, Mesos, Kubernetes also could not fail.

~~~
alexpw
Afaict, the circuit server runs on every host, and is aware of the other
nodes, coordinating with peers without a single master. So if one host fails,
the other circuits can still function, broadcasting their underlying services.

"Clients dial into [any] circuit server in order to interact with the entire
system. All [circuit] servers are equal citizens in every respect and, in
particular, any one can be used as a choice for dial-in."

However, the example diagrams I've seen, include services which aren't
masterless or even multi-master, so the app/system the circuit cluster
supports will surely fail in some way.

~~~
al2o3cr
"Clients dial into [any] circuit server in order to interact with the entire
system. All [circuit] servers are equal citizens in every respect and, in
particular, any one can be used as a choice for dial-in."

This sounds like it will cause exciting behavior under a network partition...

