You don't have to use the icon widget, it's just a convenience because it's simpler and shorter to write `Icon::icon('cog')` instead of `Html::tag('span', '', ['class' => 'icon icon-cog'])`, especially if you have lots of icons (e.g. ButtonGroup). It also allows you to abstract away the icon library you are using and easily replace it. E.g. font awesome uses `fa fa-whatever`, glyphicons uses `glyphicons glyphicons-whatever`.