Dependency Resolution with SAT [Symfony Live 2011 Paris]

16

Click here to load reader

Transcript of Dependency Resolution with SAT [Symfony Live 2011 Paris]

Page 1: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency Resolution with a SAT Solver

Nils AdermannMarch 4th 2011

Page 2: Dependency Resolution with SAT [Symfony Live 2011 Paris]

SAT?Boolean Satisfiability Problem:

Can (A|B)&(C|D|(E&(A|D))&E be true?

D(isjunctive)NF:(A&B)|(C&D&A)|(B&D)|C

C(onjunctive)NF:(A|B)&(C|D|A)&(B|D)&C

Page 3: Dependency Resolution with SAT [Symfony Live 2011 Paris]

NP?“ hard” problems

“ nondeterministic polynomial time”no known algorithm which:

- can solve all instances of the problem

- does not need to try all combinations

SAT is NP-complete (Cook's theorem)

Page 4: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Package ManagementPool

Repositories

PackageName & Version

requires, conflicts, provides

Page 5: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency ResolutionUser wants to:

- install some packages

- update some packages

- remove some packages

- keep some packages

Page 6: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency Resolution

EDOS Project Workpackage 2 Team. Report on formal management of software dependencies. EDOS Project Deliverable Work Package 2, Deliverable 2, March 2006. http://www.edos-project.org/xwiki/bin/Main/Deliverables.

Page 7: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency ResolutionIdeal:

Page 8: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency ResolutionAcceptable:

Page 9: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency ResolutionNo solution:

APT

Portage

Poor solution:smart

Urpmi

Page 10: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Dependency Resolution with SATSUSE's libzypper (Michael Schroeder)

Goals:Fast

Complete & Reliable

Understandable messages & explanations

Based on ideas from minisat

Page 11: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Rule GenerationJob Rules:

Install A: (A)

Remove A: (-A)

Page 12: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Rule GenerationDependency Rules:

A requires B: (-A|B1|B2)

A conflicts with B: (-A|-B1), (-A|-B2)

C and D provide A: A requires C or D

Policy Rules:B1 can be updated to B2: (B1|B2)

Page 13: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Solving RulesUnit Propagation:

(A|B|C), (-C), (-A|C)(-C) C: false

(-A|C) A: false (-A: true)

(A|B|C) B: true

Page 14: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Rule Solving AlgorithmUnit Propagation

Contradiction?Add Rule -X or unsolvable

Backtrack to previous assignment

Assign undecided variable X (free choice)

Repeat until solved

Page 15: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Free ChoicesKeep installed packages installed

Do not install unecessary packages

Pick newest version

Page 16: Dependency Resolution with SAT [Symfony Live 2011 Paris]

Thank you!

and Michael Schröder at Novell for his slideshttp://files.opensuse.org/opensuse/en/b/b9/Fosdem2008-solver.pdf

http://www.mancoosi.org/edos/manager/http://en.opensuse.org/openSUSE:Libzypp_satsolver