Nonhierarchical OOP If you ask ten programmers what characterizes object-oriented programming best, chances are many of them will use the word "inheritance" in their answer. I'd bet money that some of those programmers will then go back to working on a project that makes good use of duck typing, or of mixins. Such techniques are examples of nonhierarchical OOP: object-oriented programming that eschews inheritance. The current trend for new programming languages seems to be to include more and more nonhierarchical OOP features. Some examples are new-style interfaces in Google's Go, traits in Scala and Fortress, and roles in Perl 6. This talk will focus on roles as provided by Perl 5's Moose object system, as that seems to have the most uptake and is most relevant for OSDC.tw's audience. Furthermore, because of roles' "class building-block" nature, they are perhaps the best fit for open source of any nonhierarchical system thus far. Thankfully, nonhierarchical OOP is becoming mainstream. Because seriously, multiple inheritance needs to die!