mid-13c., boie "servant, commoner, knave, boy," of unknown origin. Possibly from Old French embuie "one fettered," from Vulgar Latin *imboiare, from Latin boia "leg iron, yoke, leather collar," from Greek boeiai dorai "ox hides." (Words for "boy" double as "servant, attendant" across the Indo-European map -- compare Italian ragazzo, French garçon, Greek pais, Middle English knave, Old Church Slavonic otroku -- and often it is difficult to say which meaning came first.)

But it also appears to be identical with East Frisian boi "young gentleman," and perhaps with Dutch boef "knave," from Middle Dutch boeve, perhaps from Middle Low German buobe. This suggests a gradational relationship to babe. For a different conjecture:

In Old English, only the proper name Boia has been recorded. ME boi meant 'churl, servant' and (rarely) 'devil.' In texts, the meaning 'male child' does not antedate 1400. ModE boy looks like a semantic blend of an onomatopoeic word for an evil spirit (*boi) and a baby word for 'brother' (*bo). [Liberman]
A noticable number of the modern words for 'boy', 'girl', and 'child' were originally colloquial nicknames, derogatory or whimsical, in part endearing, and finally commonplace. These, as is natural, are of the most diverse, and in part obscure, origin. [Buck]

Used slightingly of young men in Middle English; meaning "male negro slave or Asian personal servant of any age" attested from c. 1600. Exclamation oh, boy attested from 1892.