I was hired for an internship position, despite me admitting that I didn't think I would be a good fit based on my insufficient skillset. Maybe my anecdote may help you, and I'll try to explain it:
During the phone interview in which the job responsibilities and the technical skills desired were discussed in detail, after answering some questions about how I would approach things, I felt as if my answers were based on a narrower field of experience (I listed technologies with which I was comfortable, and using them in that scenario would have been a stretch.)
At about the halfway point through the phone interview, I freely admitted that my primary background and experience was not in that technical area, and although it interested me and I knew I could succeed given time to learn, I probably was not the most qualified candidate (for that position.) I said that if that was a dealbreaker, then I wouldn't be offended if they cut the interview process short; but expressed enthusiasm that, if that was not the case, I'd like to continue. Not only did we continue the interview process, but I was eventually offered the position.
Mind, this was for an internship so I think the lack of experience might have been expected, but the following applies to positions of all kinds:
As it turns out, some software companies have gotten fantastic at training new employees, and what they seek are people who can ramp up quickly. There are many companies which use technologies that aren't very common, so they have to teach 90% of their developers how to use those technologies anyway.
Your initiative to improve, without anyone coercing you, before applying to a position at that company speaks well of your desire to learn and your work ethic. Your desire to contribute to their open source projects shows enthusiasm in something they care about (i.e. open source software). If you are bright on top of that, you might be exactly what they're looking for.
The takeaway is that you should be honest about:
- Your technical ability
- Your enthusiasm for the work
- Your willingness to learn if you presently lack all of the technical skills required
And you should carry yourself with:
- Confidence (not cockiness - know what you can do and don't doubt it)
- Cheerfulness (be happy to be there, happy to meet them, happy to learn about the company, happy to talk about tech, happy to get coding questions)
- Composure (know no fear, be not perturbed)
Also: you should not discredit yourself at any point. It's one thing to admit inexperience, but don't imply that you're incompetent or incapable, because you're obviously not! If you don't get the position, apply again later!
(Besides, real-world experience will definitely increase your programming skill to the point you wanted very quickly.)