On Apr 4, 2014, at 5:38 PM, Andrew Bell <notifications@github.com> wrote:

> In src/StageFactory.cpp:
> 
> > @@ -38,7 +38,7 @@
> >  #include <pdal/MultiFilter.hpp>
> >  #include <pdal/Reader.hpp>
> >  #include <pdal/Writer.hpp>
> > -
> > +#include "./drivers/bpf/BpfReader.hpp"
> 
> I don't know why it would need to be public.

I generally agree with this, but there have been times when you've wanted to specifically deal with a stage of a concrete type. If a user wants to stick together drivers.las.reader->filters.inplacereprojection->drivers.las.writer in a specific arrangement, they are going to have the fullest control by dealing with the real types themselves rather than an opaque pipeline that hides things that they eventually end up digging into anyway. 

The tradeoff of too many public headers, with too much noise is definitely in play. I would like to see a "public" set of headers, but as time has gone on, it isn't clear that those would be anything other than the PipelineManager and friends. That isn't enough if you want to do something specific though.

> Wonder, also, if we should move all headers to be collocated with the source and then "install" public headers to someplace in particular when the library is installed.

As mentioned, then we have to state what our public API actually is, and laziness and indecision are why I haven't done much on that front.