Generally speaking, this is a term that rarely applies to software as we tend to think of our product lines advancing through versions and releases rather than generations.
That said, a software generation is much like a hardware generation, where the underlying technologies all play a part in defining the generation of the software. To give you a really rough idea about what I mean, let's use the Windows operating system as an example. You could say that every 2 or 3 versions of Windows is a generation based on the technologies that make each few versions stand out from the Windows versions that came before.
Off the top of my head (and I may not be remembering all of this correctly), Windows Generations might be roughly described as follows.
- Generation 1: Windows 1 - 2
- Generation 2: Windows 3 - 3.11
- Generation 3: Windows 95, 98, ME
- Generation 4: Windows NT, 2000, XP
- Generation 5: Vista, Windows 7
That's probably an oversimplification and misses lots of variants, but in terms of technologies, interfaces, hardware compatibility and so on, each major advance (and effectively each near total re-write) would be a distinct generation.
Using the term "Generation" can be helpful if you want to look at things historically, or to define when your development should bypass all of the refactoring and other "longevity and compatibility measures" you might take to extend the lifetime of your products, however the reality is that keeping track of these things is more useful to the marketers than your average developer, and even then, the marketing spin probably won't have as much impact with your customers as simply bumping the Major version number up +1 on your product and listing all of the new features.