Abstractions on abstractions on abstractions; background tasks and their abstraction stacks; increased cache and buffer sizes to take advantage of increased typical memory capacity. For an example of the latter, handling TCP on a Commodore 64 is a problem because the memory can only fit about 45 packets with nothing left over, but now you can just allocate a megabyte receive buffer per connection.