[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Lintian as a static analysis framework



Hi

Yesterday in #debian-qa, I chatted with Paul Wise and the idea came up
that Lintian should be a framework that others could use as a basis for
their own analysis - particularly when these analysis would conflict
with some of the Lintian design goals (namely we try to be independent
of the system state).
  When I write "Lintian should be a framework", feel free to read it as
"refactor a framework out of Lintian, on which Lintian will depend and
the framework will have a separate name".

Occasionally I have found myself considering to write some tool to check
for something that would require (e.g.) a Packages file[1] only to stop
because I need to (re-)write a package extractor, a dsc or d/control
parser, two of Lintian's collections and then my analysis code on top of
that.
  Of course with my knowledge of Lintian's internals I could still soup
together some code that would allow me to re-use (the parts of) Lintian
(I need), but as implied - it would not be pretty.

A(nother) personal thorn in my side would be #262783; in my ideal world
this ought fairly simple, but in reality it is very complex.  Mostly
because the frontend actually glues the Lab together with the
collections and the checks.  The frontend also peeks deep into the
internal parts of the lab structure (to test for and mark collections as
finished).  To me this is a sign that our backend needs more work.

To be honest I have even considered factoring our (new) test suite code
so packaging tools like debhelper and javatools can (ab)use it for their
own test suite.
  The idea of template packages where you only have to mess with a bare
minimum to get a package is nice and I could have used that for
javatools to catch regressions a number of times now, but I do not feel
like re-inventing the wheel either.

On the other hand, I know it can be difficult to settle and maintain a
public API.  As far as I can tell, we have currently only officially
committed ourselves to the frontends and the profiles + the (names of)
the tags, checks and the collections.  Everything else we can basically
break and smash as we much like as long as we fix it before we hit
release (which I admit is nice from a developer's point of view).
  That being said, I could see us commit to a liblintian-perl[2] that
would for starters provide things like Lab, Lab::Package, the
collections and Lintian::Collect{,::Binary,::Source,::Changes} (possibly
moving Lab + Lab::Package under the Lintian:: prefix first).
  As we mature other things (or people request it) we could migrate more
and more of lib/ into liblintian-perl.

As for the test suite code, I would mature it a bit more and then
refactor it into an external package to avoid circular
build-dependencies between Lintian and javatools (javahelper) if possible.

Obviously, these changes would very likely fall under the "Hard
projects" listed on [3], but I think we would do ourselves and the
Debian project a favour in the long run by doing this.

~Niels

[1] Or some other data that we in Lintian can never rely on being
present and up to date.

[2] Care must be taken here to ensure we keep the "git clone, hack, run"
property if we install the code in liblintian-perl under /usr/share/perl5.

[3] http://wiki.debian.org/Teams/Lintian


-- 
To UNSUBSCRIBE, email to debian-lint-maint-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: [🔎] 4E1583C6.3090502@thykier.net">http://lists.debian.org/[🔎] 4E1583C6.3090502@thykier.net


Reply to: