mid-13c., boie "servant, commoner, knave" (generally young and male); c. 1300, "rascal, ruffian, knave; urchin," mid-14c. as "male child before puberty" (possibly an extended sense from the "urchin" one). A word 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: Used slightingly of young men in Middle English, also in familiar or contemptuous use of criminal toughs or men in the armed services. In some local uses "a man," without reference to age (OED lists "in Cornwall, in Ireland, in the far West of the U.S."). Meaning "male negro slave or Asian personal servant of any age" attested from c. 1600. Extended form boyo is attested from 1870. Emphatic exclamation oh, boy is attested by 1917. Boy-meets-girl "typical of a conventional romance" is from 1945; the phrase itself is from 1934 as a dramatic formula. Boy-crazy "eager to associate with males" is from 1923.
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]