Features/Thunderbird/Modern MIME Parser
Status
| Modern MIME Parser | |
| Stage | Draft |
| Status | ` |
| Release target | Thunderbird 14? |
| Health | OK |
| Status note | ` |
{{#set:Feature name=Modern MIME Parser
|Feature stage=Draft |Feature status=` |Feature version=Thunderbird 14? |Feature health=OK |Feature status note=` }}
Team
| Product manager | ` |
| Directly Responsible Individual | ` |
| Lead engineer | Joshua Cranmer |
| Security lead | ` |
| Privacy lead | ` |
| Localization lead | ` |
| Accessibility lead | ` |
| QA lead | ` |
| UX lead | ` |
| Product marketing lead | ` |
| Operations lead | ` |
| Additional members | ` |
{{#set:Feature product manager=`
|Feature feature manager=` |Feature lead engineer=Joshua Cranmer |Feature security lead=` |Feature privacy lead=` |Feature localization lead=` |Feature accessibility lead=` |Feature qa lead=` |Feature ux lead=` |Feature product marketing lead=` |Feature operations lead=` |Feature additional members=` }}
Open issues/risks
`
Stage 1: Definition
1. Feature overview
The current implementation of libmime is not maintainable, by combination of the library pushing the entire stack from parsing to display management logic into one single system and the implementation in an obfuscatory style of C. The goal of this project is to provide a new implementation of the parsing logic which is more accessible to other people.
2. Users & use cases
The new implementation should be easily usable and drivable from JS, and have at least a usable API from C++. These are the kinds of tasks we envision supporting: 1. Use in the fakeservers where understanding MIME is necessary 2. Things like Gloda that need an accurate representation of the MIME tree
3. Dependencies
`
4. Requirements
1. Must be usable from different threads (in both C++ and JS, from ChromeWorkers) 2. Should avoid main thread if it all possible 3. Extension authors should confirm that the design is tenable in the long term
Non-goals
This feature is intended to eventually replace libmime in the long run. However, replacing the current code in libmime is not a goal in this iteration.
In this iteration, the following features will be unsupported to keep the implementation manageable: 1. RFC 2047/RFC 2231 decoding (all i18n concerns, basically) 2. Support for uuencode, yEnc, S/MIME, PGP
Stage 2: Design
5. Functional specification
`
6. User experience design
`
Stage 3: Planning
7. Implementation plan
The core parser that can handle the MIME torture test is already complete as of this writing. Support for decoding needs to be done.
8. Reviews
Security review
A MIME fuzzer should be developed at some part in this process.
Privacy review
`
Localization review
l10n and i18n are explicit non-goals for now.
Accessibility
`
Quality Assurance review
We need some way of checking that the new parser and libmime return the same results.
Operations review
`
Stage 4: Development
9. Implementation
`
Stage 5: Release
10. Landing criteria
We need to ensure that this gets added to an automated test suite somehow. {{#set:Feature open issues and risks=` |Feature overview=The current implementation of libmime is not maintainable, by combination of the library pushing the entire stack from parsing to display management logic into one single system and the implementation in an obfuscatory style of C. The goal of this project is to provide a new implementation of the parsing logic which is more accessible to other people. |Feature users and use cases=The new implementation should be easily usable and drivable from JS, and have at least a usable API from C++. These are the kinds of tasks we envision supporting: 1. Use in the fakeservers where understanding MIME is necessary 2. Things like Gloda that need an accurate representation of the MIME tree |Feature dependencies=` |Feature requirements=1. Must be usable from different threads (in both C++ and JS, from ChromeWorkers) 2. Should avoid main thread if it all possible 3. Extension authors should confirm that the design is tenable in the long term |Feature non-goals=This feature is intended to eventually replace libmime in the long run. However, replacing the current code in libmime is not a goal in this iteration.
In this iteration, the following features will be unsupported to keep the implementation manageable: 1. RFC 2047/RFC 2231 decoding (all i18n concerns, basically) 2. Support for uuencode, yEnc, S/MIME, PGP |Feature functional spec=` |Feature ux design=` |Feature implementation plan=The core parser that can handle the MIME torture test is already complete as of this writing. Support for decoding needs to be done. |Feature security review=A MIME fuzzer should be developed at some part in this process. |Feature privacy review=` |Feature localization review=l10n and i18n are explicit non-goals for now. |Feature accessibility review=` |Feature qa review=We need some way of checking that the new parser and libmime return the same results. |Feature operations review=` |Feature implementation notes=` |Feature landing criteria=We need to ensure that this gets added to an automated test suite somehow. }}
Feature details
| Priority | Unprioritized |
| Rank | 999 |
| Theme / Goal | ` |
| Roadmap | Thunderbird |
| Secondary roadmap | ` |
| Feature list | Thunderbird |
| Project | ` |
| Engineering team | ` |
{{#set:Feature priority=Unprioritized
|Feature rank=999 |Feature theme=` |Feature roadmap=Thunderbird |Feature secondary roadmap=` |Feature list=Thunderbird |Feature project=` |Feature engineering team=` }}
Team status notes
| status | notes | |
| Products | ` | ` |
| Engineering | ` | ` |
| Security | ` | ` |
| Privacy | ` | ` |
| Localization | ` | ` |
| Accessibility | ` | ` |
| Quality assurance | ` | ` |
| User experience | ` | ` |
| Product marketing | ` | ` |
| Operations | ` | ` |
{{#set:Feature products status=`
|Feature products notes=` |Feature engineering status=` |Feature engineering notes=` |Feature security status=` |Feature security health=` |Feature security notes=` |Feature privacy status=` |Feature privacy notes=` |Feature localization status=` |Feature localization notes=` |Feature accessibility status=` |Feature accessibility notes=` |Feature qa status=` |Feature qa notes=` |Feature ux status=` |Feature ux notes=` |Feature product marketing status=` |Feature product marketing notes=` |Feature operations status=` |Feature operations notes=` }}