hyperboria / bugs

Peer-to-peer IPv6 networking, secure and near-zero-conf.
154 stars 17 forks source link

refactor into command line and user interface #150

Open tmbdev opened 7 years ago

tmbdev commented 7 years ago

The current build process has a lot of dependencies and produces .deb files that install web interfaces and other features.

Have you considered refactoring the project into a small, self-contained, pure C command line tool for just the router and making the UI and other features separate projects and packages?

kpcyrd commented 7 years ago

@tmbdev there are quite some projects in contrib/ which are not really part of the project (this is why they are in contrib/ in the first place). I agree that they shouldn't be included in the package, which is the case for the archlinux package, for example. If you're trying to build cjdroute, you should use ./do which procudes a single binary you can use. There is no official api client though.

tmbdev commented 7 years ago

Thanks. Yes, I know that I can just build cjdroute by itself, but even building with ./do still starts off with trying to install a new version of nodejs. I think it would be more reassuring, easier to audit, and easier to build if cjdroute was a self-contained simple C project, with all the other code in one or more separate repositories. Anyway, it's just a suggestion/observation. I realize it's a volunteer project and there are lots of other interesting things to do, but this kind of refactoring really can only be done by the core developers.

kpcyrd commented 7 years ago

nodejs is the only dependency. To build cjdroute directly, install nodejs from your distribution and execute nodejs node_build/make.js directly.

The issue is that not even the build process is driven by nodejs instead of make, but that there's a pre-processor in place that is not part of regular C compilers and are non-trivial to port:

https://github.com/cjdelisle/cjdns/blob/63fdd890d7b9903e386ae094fe4ace548d3988f6/util/Linker.h

To improve audit-ability, we should probably get rid of the old libuv library that is vendored into the project instead.