my "Domain logic only" definition is actually sub-optimal. It would mean: if you put everything into aspects, your code would remain clean and the infrastructure separated. But with bytecode weaving and additional infrastructure the complexity / voodoo factor would increase. So I wouldn't consider a simple POJO with bloated aspects as "lightweight".

So let's consider what the opposite of lightweightness means in terms of examples:
- a complex programming framework that is hard to understand
- a programming framework that requires a lot of boiler plate code that has to be written (or generated) and maintained
- a programming framework that makes testing difficult
- heavy infrastructure that is complex to configure and has long startup time
- a programming environment that slows down the execution speed of your code
- a programming model that slows down programmers

The common thing of all these examples is that a heavyweight framework enforces lot's of constraints to your overall system and to your development process.

So I would define leightweight as follows:

A software component is leightweight when it enforces minimal constraints to the rest of the system.