> As regards the nonbonded list, we cannot include CGAL in the kernel > since it restricts the use of IMP to that of the QPL license. I am pretty sure you are wrong on this. From my understanding QPL just says that you have to make any patches you make to the code available as patches and you can link anything you want against it. Templates are a grey area in terms of licensing since they mix linking and compilation, but we are definitely good if we have one .cpp which includes the CGAL files and that file itself is licensed under QPL. That file can be linked in with the IMP kernel (which which otherwise LGPL) without any problems.
> This appears to preclude use of the current patch, > since Algorithm is an enum - I guess either Algorithm needs to > become a > class, or a CGAL_NBL class (in a module) can derive from a base NBL > class (in the kernel). At the Python level it is easy to fall back > from > CGAL_NBL to regular NBL at runtime if the extension module is not > available - just wrap the import in a try block. It makes it quite a mess if the CGAL code is in a separate library since then either the user has to be aware of the algorithms and specifically pick to use the CGAL algorithm or we have to somehow test at runtime if the the dll can be loaded. The former is bad since most users will have no clue what the different collision detection algorithms are (and won't care) and the latter is complicated.