I think question 1 falls into Optionnal dependencies and allow options for packages.
I end up using Polynomials.jl to represent polynomials and, via Requires.jl, the user can choose between Polynomials.roots
and PolynoamialRoots.roots
. It is also possible not to use Polynomials.jl but some redundant code will be loaded anyways.