This paper presents a self-stabilizing algorithm to color the edges of a bipartite network such that any two adjacent edges receive distinct colors. The algorithm has the self-stabilizing property; it works without initializing the system. It also works in a de-centralized way without a leader computing a proper coloring for the whole system. Moreover, it finds an optimal edge coloring and its time complexity is O(n (2) k + m) moves, where k is the number of edges that are not properly colored in the initial configuration.