Today is the first time I had heard about Newton Dynamics and I was thinking it might be useful for people that have been involved in the project for a long time to see the first impression that I, as a potential new user, got of the library and the project as a whole.
I've been wanting to do a small hobby project that involves some physics simulation for a while and found myself with some spare time this afternoon. I'm on Linux and knew that I would want to use an open source physics engine but didn't know what was out there. After some general searches, I had a list of a handful of libraries that seemed promising. After adding a few "this engine vs that engine" searches to further narrow things down, I found several very positive mentions of Newton, including a paper called, "An Evaluation of Open Source Physics Engines for Use in Virtual Reality Assembly Simulations" in which Newton came out as the most accurate. So, even though things can change quickly in the open source landscape and the paper was from 2012, I decided to give Newton a try.
Plugging "Newton Dynamics" into Google brought me directly to the home page, which looked nice and professional. I immediately noticed the centrally located and helpful sounding "Links to demos, tutorial, FAQ, etc" and, wanting to see some code examples, clicked the link. Focusing directly on the "Main Contents" section of the new page, I failed to notice the "currently migrating" disclaimer at the top and proceeded, only to find that every single link on the page was broken. Whenever I get to a project that has a bunch of broken links, I generally think, "abandoned project".
After some futile clicking, I returned to the home page thinking that I would just install the dev version of the library and look for examples there. A quick scan for install instructions on the home page yielded only the "Download and Fork at GitHub" link at the very top. That's odd, I thought. No packaged versions and no Linux distribution specific info? Well, I figured, maybe they're disciplined about doing development work in separate branches. So I clicked my way to GitHub. Hm, no information in the README.md except 3 links, one to the page full of broken links, one back to the home page and one to the forums. Where was the build instructions and where was the overview of dependencies? None of this fit with what I had read, that indicated that Newton was already a mature project years ago.
A quick look at the stats on GitHub showed both that there was ongoing coding being done and that a lot of hard work has gone into the project. 10 million code changes spread over 2500 commits, with essentially all work having been done by a single person after the project was created on GitHub in 2013. So far, so good! But when I took a look at the branches, I found that there was only a single branch and that development was happing directly there. Hm, new users are being referred directly to a development branch of the library? Would it build? So, after a "git clone", I ran cmake with the Makefile target. But, not surprisingly, cmake errored out due to missing dependencies. I hadn't found an overview of those. There was no INSTALL file either.
Next step was to repeatedly run cmake and install a new dependency each time cmake errored out. Fortunately, I have enough experience that I could see what's missing from the errors, but that's probably not the case for everyone. After the dependencies were in place, cmake ran ok and I got the makefiles. But now, the compile errored out. It was due to a __debugbreak() left in the code. The function is Windows / Visual Studio specific. So, even though Newton is described as a cross-platform library in the first sentence on the home page, the current branch has not been tested on Linux.
So, I, as a new user, was directed to download a development branch of the library directly from GitHub. I was given no build instructions and no overview of the dependencies. And the build had not been tested on Linux.
After taking out the __debugbreak(), I got the library to build. I then looked around in the source for examples and found the demosSandbox app. It looked promising, but it seemed like a bit of an odd example, everything having been rolled into a huge monolithic app. The size of the binary was almost 30MB. I found that some of the demos in there crashed, which was not surprising given that it was a dev branch. But before diving into the code, I decided to take another look for online documentation. This time, I tried the wiki and found working links, where one was for the API. Nice! But wait, there were links for version 1.35 and 2.0 but the source I had looked like it was version 3. If there was any documentation for the version 3 API on the wiki, I couldn't find it.
But, I thought, maybe the changes between version 2 and 3 are all internal, so the API is either unchanged or backwards compatible. So I decided to give things a try with the 2.0 API docs. After skimming through the "getting started" and API docs, I found that the first thing I needed to do was to create a NewtonWorld object with NewtonCreate(), which takes two function pointers that can be set to NULL. I wrote up the call, but, nope, "error: too many arguments". It looked like I would be writing against an API for which there was no current documentation.
So, it was time to hit the forums. General Discussion seemed like the most natural place to start and I clicked my way in there. Ok, it started out with an announcement section and the top announcement had a funny sounding title, "As it turned out, the emperors had not cloth." I opened it, and ended up reading through what looked like some kind of ongoing bitter feud. Apparently, the main developer feels that Newton's user base is diminishing because Newton is being maliciously undermined by competitors.
Mulling that over and thinking about the first impression of Newton that I had gained over the last couple of hours, I realized that, if it's indeed the case that people are moving away from Newton, it seemed unlikely to me that it's because of FUD that may be directed against Newton by competing projects. It seemed much more likely that the main reason would be that potential users are, like me, unaware of any FUD. Instead, they try using Newton, encounter the type of issues that I had just encountered and simply move on to a library with better documentation and better packaging. If the other project makes it easier to get up and running, it won't matter to most people if it's technically less accomplished. And if problems come up with the other library, which is now familiar to them, they'll probably try to fix things there instead of porting their project over to another library, so they're gone forever.
It's also worth noting that, to the new user that encounters threads such as "As it turned out, the emperors had not cloth", it won't matter much who's right or wrong, and they certainly won't dive into years of history to understand what's going on. Instead, it will just make them wonder if they're investing their time in the best library.
I see that a huge amount of work has gone into the Newton code, and stuff online indicates that it's an excellent library. But it's clear that other parts of the project need some TLC. Of course, that's pretty common with open source projects, the main reason being that it's more fun to write code than documentation. For myself, I'm going to keep trying to use Newton for my small project.