ZeroTier 2.0 Status
zerotier.com
zerotier.com
On the other hand, I am one of the apparently few people who actually have set up ZeroTier on "really tiny routers"... at least, routers with 128MB of RAM, which I guess falls under their definition of tiny since they would have a hard time tolerating a "20-30mb" increase in RAM usage. Luckily for me, I'm no longer using those routers, but I'd like to be able to set them back up in the future if I need them. So I hope ZeroTier does get around to making a "super-minimal reduced feature set C++-only client"...
Apparently ZeroTier is no longer under an open source license, as of a month ago. Another comment has the details. That’s a real shame… I think I will stop using it. :(
[1]: https://github.com/zerotier/ZeroTierOne/blob/master/LICENSE....
The only real issue I had is that it wouldn't work unless every machine had access to the root servers. That seems like it's no longer the case in 2.0, which is great news.
(ZeroTier founder and main author here)
I use it to access my computers and NAS from different locations. At home, the NAS is a single hop away so it doesn't go via the internet.
I was able to ditch Chrome Remote Desktop as a result, and with my usage, it's all free. I'd pay for it, though!
It should work fine - at least at $DAYJOB I ship a GOOS=windows GOARCH=386 CGO_ENABLED=1 binary, it passes all the test cases + no user complaints.
- Cygwin helps a lot by providing a GNU make that works with CC=mingw-w64 (i.e. no cygwin1.dll dependency) and we can simply link these extra .o by setting `-extldflags "-lxxxx"` on `go build` invocation; and/or
- Put .c files in a Go package and build with CGO as-is (e.g. github.com/datadog/zstd package and others). More convenient but some limitations on CFLAGS for security reasons post-1.10.
All works fine and was not particularly complex to set up. GC changes have caused us to need more explicit `runtime.KeepAlive` calls after CGO interop however.
The tricky part of ZT-only DNS would probably be making it work for more than one network at once. So you couldn't send all DNS to one place that serves *.myzt.example.com and recursively resolves anything else, because it wouldn't know about myzt-2.example.com.
Edit: a Route 53 map of your network may be easier to achieve if you use the terraform provider, which I have let languish for a while and should probably give to someone else to maintain (ZT people -- want to take it on? You've got Go expertise now!): https://github.com/cormacrelf/terraform-provider-zerotier
mDNS works fine on zerotier for me at least.
Fact? No. Opinion? Yes
ZeroTier gives you fully configurable SDN with intelligent local/public routing, online interface, full nat workaround, custom addressing, global register requiring only a token to authenticate a node, and many other things.
I think that might already be possible but it'd be nice if the configuration was abstracted away behind some simple interface.
That'd allow it to replace Wireguard and Mullvad for me as I mostly use it as a means to bypass georestrictions.
Or run HTTP/SOCKS proxies on these nodes…
Sometimes you want two computers to be able to talk to one another, even if they're behind a NAT or there's otherwise infrastructure between them that makes this difficult.
Zerotier makes that easier by
* Checking to see if the other device is directly reachable, if you're both already on the same LAN.
* Employing NAT hole punching to try to establish a path anyway
* Finally proxying the connection over a server reachable by both
In my experience it's the easiest way to make sure all my computers are reachable, even if one of those computers is a phone and another one is behind a NAT.
I'll stay on 1.x, thank you very much. I hope there will be a well maintained fork of 1.x.
Just look at https://github.com/minio/asm2plan9s / https://github.com/minio/c2goasm — carefully read the readme and understand what this hack does. If the existence of this hack does not make you extremely angry at Go, I don't know what will.
Oh and I don't like the language itself either. The anti-intellectual attitude of the designers sucks. "Screw anything discovered by PL research in the last 30 years, we just want everything like in the good old days with C but with GC and concurrency" is just silly. The "developers are too stupid to use smart features like generics" attitude is quite offensive. (I guess they are responding to the overwhelming demand for generics now, but it's not like they had a big change of heart, it's just caving to external pressure, not personally embracing the concepts)
It's not anti-intellectual. It's just reasoning from a different set of premises.
Go is remarkably productive. I've written extremely complex software in it and found that I rarely miss that stuff. I do agree that it needs some limited/minimal generics support for data structures and algorithms, but that's about all I would add.
I think it shows that a lot of the stuff that's been explored in the last 30 years in languages just isn't necessary. Go is not a language for showing off how smart you are with esoteric language constructs. It's a language for getting things done with minimal cognitive load across the problem domain.
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer....
Go is for people who have made it to at least apprentice hacker in that progression and realized that complexity is evil. Complexity should only be added when one is dragged kicking and screaming into it by the inherent complexity of the problem domain, and even then only after exploring ways of avoiding it.
I applaud Go's designers for doing that at the language level. They're being dragged into generics after exploring all possible ways of avoiding generics, which is the right approach. They also bailed on an idea to add unnecessary syntactic sugar to error handling in Go because it isn't necessary. It saves a small amount of typing in exchange for increased cognitive load, and cognitive load is more expensive than keystrokes.
Functional programming constructs rarely add complexity, they are excellent tools for handling and reducing it.
I disagree. It's a lot of text, but cognitively it's trivial to understand.
A more terse language construct that moves logic around requires more thought to comprehend even if it takes up less space on the screen.
Computers are fast. Screens are big. Our brains are overwhelmed and limited.