Both Profiles and Permission Sets can be created and packaged in your application to help administrators of your application control access to your objects, fields, tabs, and pages. Fundamentally, profiles have been historically used to prepackage roles, such as team principle, that you envisage the user having when using your application. In contrast, Permission Sets can be used to express the functionality in your application, such as the ability to assign a driver to a race.
By now, most people are familiar with configuring profiles to control security. The issue is that they can eventually lead to a proliferation of profiles; as small differences in needs between users arise, profiles are then cloned and this increases ...